iOS - Sync, Async, Serial, Concurrent

Synchronous(동기)

동시에 발생하는 -> 여기서 동시 발생은 작업이 동시 발생 X, '요청 - 응답' 이 동시 발생한다는 뜻

요청에 대한 응답이 동시에 발생야 한다. -> 내 작업이 끝나기 전까진 다른 작업을 수행하지 못한다.

 

장점

 - 설계가 매우 간단하고 직관적임

단점

 - 응답이 주어질 때까지 아무것도 못하고 대기

 

 

Asynchronous(비동기)

동시에 발생하지 않는

요청에 대한 응답이 동시에 발생하지 않는다. -> 내 작업이 끝나기 전에 다른 작업을 수행할 수 있다.

 

장점

 - 응담이 주어질 때까지 기다리지 않고 다른 작업을 하므로 자원을 효율적으로 사용 가능

단점

 - 동기보다 설계가 복잡

 

 

Serial

 순차적인 * Sync와 Serial은 다른 개념

 - Sync는 앞 작업과 뒷 작업의 연관성에는 상관이 없음, 단일 작업에 대한 특성을 지칭

 - 앞 작업이 Sync라 해도, 뒷 작업은 Asnyc일 수도 있음

-> 이 앞 작업과 뒷 작업을 '순차적'으로 실행시킬지 말지 정하는게 Serial 과 Concurrent

 - Queue에 들어온 작업들을 순차적으로 실행

 - 단일 작업들을 순차적으로 하나씩 실행(Serial Queue는 한 번에 하나의 task만 실행시킬 수 있기 때문에)

Async 작업이 있다 해도 Serial Queue는 1개의 task만 실행할 수 있다.

우리가 사용하는 Main Queue가 Serial Queue이다. 

 

Serial Queue는 주로 작업을 동기화할 때 사용

 

 

Concurrent

동시에 발생하는

 - Async는 나는 내 요청에 대한 답을 기다리지 않겠다 -> 단일 작업에 대한 특성을 지칭

 - 내 Queue에 들어온 작업들을 동시다발적으로 실행

 - 한 번에 여러 개의 Task를 실행시킬 수 있다.

 

 

 

예제)

let concurrentQueue = DispatchQueue.init(label: "SodeulQueue", attributes: .concurrent)
concurrentQueue.sync  { print("start") }
concurrentQueue.async { for _ in 0...5 { print("async") }}
concurrentQueue.sync  { for _ in 0...5 { print("sync") } }
concurrentQueue.sync  { print("end") }

 

작업 순서

 

[출처 : https://babbab2.tistory.com/64]

'Language > Swift' 카테고리의 다른 글

iOS - Singleton Pattern  (0) 2022.11.01
iOS - GCD(Grand Central Dispatch)  (1) 2022.11.01
iOS - 프로세스(Process) / 스레드(Thread)  (0) 2022.10.31
iOS - AppDelegate  (0) 2022.10.27
Swift 네트워킹 방법  (0) 2022.07.11