본문 바로가기

ios

5. Swift Concurrency

동시성 

    • 특정 프로세스의 실행 시간이 다른 프로세스의 흐름과 겹치는 상황에서 동시에 실행한다고 말한다.
    • 동시에 실행하거나 동시에 실행하는 것처럼 보이게 하는 것을 동시성이라고 한다.
    • 싱글코어에서는 2개의 작업을 동시에 실행하는 것 처럼 보이기 위해 context switch가 일어난다.
    • context switch
      • 프로세스나 스레드의 상태를 저장하여 나중에 복원하고 실행을 재개한 다음 이전에 저장된 다른 상태를 복원하는 프로세스이다.

프로세스 (process)

  • 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
  • 프로세스는 하드 디스크에 설치 되어 있는 프로그램을 메모리 상에 실행중인 작업입니다.
  • 운영체제에서 여러개의 프로세스를 동시에 실행하는 것을 멀티태스킹이라고 한다.
  • 어떤 작업을 하나이상의 프로세스에서 병렬로 처리하는 것을 멀티 프로세싱이라고 합니다.

 

Queue

  • iOS의 동시성 프로그래밍은 Queue에 넣기만 하면 OS가 알아서 쓰레드를 찾아서 쓰레드 관리(분산처리)한다.
  • 선입 선출(FIFO)로 동작한다.
  • Queue로 Task들을 보내는 방법

GCD(Grand Central Dispatch)

  • DispatchQueue 사용
  • Low level API로 스레드 풀을 관리하며 dispatch queue에 있는 작업들을 사용 가능한 스레드에 스케줄링
  • 개발자는 스레드 관리에 신경쓰지 않아도 되며 Task들을 dispatch queue에 넣어주면 됨.
//큐로 보낼거야 | 큐의 종류|비동기적으로
DispatchQueue.global().async {
//다른 쓰레드로 보낼 작업을 배치
//이 클로저 하나가 작업의 뭉탱이 
}

 

Operation

  • Operation Queue 사용
  • GCD를 기반으로 생성됨
    • Operation : GCD + 여러가지 기능(작업 취소, 순서지정, 의존성 등)
  • 복잡한 일
  • 재사용성 : 데이터와 기능을 캡슐화한 객체
    • 작업 단위 혹은 작업을 래핑하고 나중에 실행할 수 있으며 해당 작업 단위를 여러번 제출 가능

 

Synchronous(동기)

  • 첫번째 작업 시작 후 작업이 끝나는 것을 기다린 후 다음 작업을 처리한다.
  • 즉, 작업이 끝나기 전까지 메인쓰레드가 다른 작업을 수행하지 못한다.
  • 동기적으로 보내는 코드를 짜더라도 실직적으로 메인쓰레드에서 순차적으로 처리됨(동기 코드와 동일하게 작업)
DispatchQueue.main.sync {
//Main 큐에서 동기 방식으로 실행할 코드
//많이 사용 안한다.
// 처리시간을 줄이기 위하여 비동기를 사용(Queue를 통해 쓰레드 분산)하는 거라 동기는 거의 사용 안함
}

 

Asynchronous(비동기)

  • 첫번째 작업 시작 후 작업이 끝나는 것을 기다리지 않고 바로 다음 작업을 처리하는 것
  • 메인 쓰레드가 다른 일 처리를 시작할 수 있다.
  • 여러가지 작업을 동시에 처리 가능
  • 비동기 개념이 필요한 이유는 대부분의 서버와의 통신(네트워크 작업) 때문
  • 네트워크와 관련된 작업들은 내부적으로 비동기적으로 구현되어 있음
DispatchQueue.main.async {
//Main 큐에서 비동기방식으로 실행할 코드
//즉, 실행하고 기다리지 않는 코드
}

 

Main Queue - Serial(직렬) 큐

  • Queue에서 받은 테스크들을 단 하나의 다른 쓰레드로 보내는 큐
  • 한 번에 하나의 테스크를 실행하여 순차적으로 실행
  • 순서가 중요한 작업을 처리할 때 사용
  • 순서가 중요한 작업을 처리할 때 사용
  • Main Thread에서 사용되는 Queue(Main Queue)

 

Global Queue - Concurrency(동시) 큐

  • Queue에서 받은 테스크 들을 여러개의 다른 쓰레드로 보내는 큐
  • 많은 작업을 동시에 진행
  • 각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용
  • 몇개의 쓰레드로 분산할지는 시스템이 알아서 결정, 다만 여러개의 쓰레드로 분산 처리

 

출처

https://lxxyeon.tistory.com/159

 

[iOS] Concurrency(동시성) 프로그래밍(1) - Concurrency(동시성) 프로그래밍이란?

iOS에서 Concurrency(동시성) 프로그래밍에 대해 알아보자. Concurrency(동시성) 프로그래밍이란 ? GCD/Operation? DispatchQueue 의 종류 Synchronous(동기) VS Asynchronous(비동기) Serial(직렬) VS Concurrency(동시) 🔥 Concur

lxxyeon.tistory.com

https://magi82.github.io/process-thread/