-
[사전캠프 TIL 6일차] GCD (Serial vs. Concurrent)iOS💖 2025. 2. 12. 17:40
학습 키워드
🗂️ GCD : Serial (직렬) vs. Concurrent (동시) 🔴
비동기 프로그래밍 흐름 🔴
Main Thread
(sync / async)
⬇️
DispatchQueue
(1) Main Queue (= Serial Queue) /
(2) Global Queue (= Concurrent Queue) /
(3) Custom Queue (= Serial / Concurrent Queue)
⬇️
GCD / Operation 가 DispatchQueue 의 종류에 따라
⬇️
(Main 이외의 다른) Thread 에 분배
Sync (동기) vs. Async (비동기) 🔒
DispatchQueue에 작업(task)를 보내는 시점에서, 다음 작업 보낼 지 / 기다릴지 결정
Serial (직렬) vs. Concurrent (동시) 🔑
: Queue 의 특성
: 작업 순서의 중요도에 맞게 사용Queue로 보내진 작업(task)들을 한 개의 thread로 보낼 지 / 여러 개의 thread로 보낼지 결정
Serial Queue
- (보통 Main Thread 에서) 분산처리된 작업(task)을 한 개의 thread 에서 처리하는 Queue
- 한 개의 thread에서 모든 task 가 처리되는 것은 아닐 수 있음
➡️ 한 개의 thread라는 것이, 그 한 개가 모두 같을지는 보장 못함
- 한 개의 thread에서 모든 task 가 처리되는 것은 아닐 수 있음
- 작업의 시작과 종료의 순서 예측 가능
- DispatchQueue 의 종류: Main Queue, Custom Queue
DispatchQueue.main.async { // task }Concurrent Queue
- (보통 Main Thread 에서) 분산처리된 작업(task)을 다른 여러개의 thread 에서 처리하는 Queue
- 작업의 시작은 알 수 있으나, 종료 순서는 예측 불가
- DispatchQueue 의 종류: Global Queue
DispatchQueue.global().async { // task }


sync/async x serial/concurrent queue 의 4가지 조합 - SerialQueue.sync :
- Main Thread 에 작업이 쌓여있다. T1, T2, T3 ...
- sync (aka. queue에 보내지는 시점에서, 작업 끝날때까지 기다려!)
➡️ T1, 2, 3 순서대로 T1만 먼저 Queue에 보내진다.- 다음 T2, T3.. 는 T1이 thread에서 작업이 끝날 때 까지 기다린다.
- SerialQueue 에 올라온 T1이, 하나의 thread 에 분배되어, 처리
➡️ 끝났다. - T1 이 끝났으니, 같은 방식으로 T2, T3 ...이 진행&처리&완료된다.
- SerialQueue.async :
- Main Thread 에 작업이 쌓여있다. T1, T2, T3 ...
- async (aka. queue에 보내지는 시점에서, 작업 완료유무상관X!)
➡️ T1, 2, 3 순서대로 모두 Queue에 보내진다. - 작업 완료 유무 상관없이 Queue에 올라왔고, 하나의 Thread 에 분배됨
➡️ 그. 러. 나. SerialQueue의 특성으로, 1,2,3 순서대로 작업이 하나씩 끝날때까지 기다렸다가 순차적으로 작업 처리- T1 처리중! 완료 될때까지 기다려!
➡️ (T1 완료)
➡️ T2 처리중! 완료될때 기다려!
➡️ (T2 완료)
➡️ T3 처리중! 완료될때 기다려!
...
- T1 처리중! 완료 될때까지 기다려!
- ConcurrentQueue.sync :
- Main Thread 에 작업이 쌓여있다. T1, T2, T3 ...
- sync (aka. queue에 보내지는 시점에서, 작업 끝날때까지 기다려!)
➡️ T1, 2, 3 순서대로 T1만 먼저 Queue에 보내진다.
- 다음 T2, T3.. 는 T1이 thread에서 작업이 끝날 때 까지 기다린다.
- ConcurrentQueue 에 T1이 올라왔다. thread 에 분배되어, 처리
➡️ 끝났다.- concurrentQueue 의 특성이, Queue에 올라온 작업을 여러 스레드에 분배시키는 거지만,
sync로 인해 하나의 작업이 끝날때까지 Queue에 다른 작업은 올라오지 않는다.
- concurrentQueue 의 특성이, Queue에 올라온 작업을 여러 스레드에 분배시키는 거지만,
- T1 이 끝났으니, 같은 방식으로 T2, T3 ...이 진행&처리&완료된다.
- ConcurrentQueue.Async :
- Main Thread 에 작업이 쌓여있다. T1, T2, T3 ...
- async (aka. queue에 보내지는 시점에서, 작업 완료유무상관X!)
➡️ T1, 2, 3 순서대로 모두 Queue에 보내진다. - 작업 완료 유무 상관없이 Queue에 올라왔고, 여러 개의 Thread 에 분배됨
- 작업의 처리 시간에 따라 다르게 종료됨
- ➡️ concurrentQueue의 특징 : 작업의 시작 순서는 알 수 있으나, 끝나는 순서 예측 불가
회고
(그래서 이걸어떻게 프로젝트에 적용해 볼 수 있을까_)
출처
[iOS] 차근차근 시작하는 GCD — 3
sync vs async (동기 vs 비동기) 를 알아봅시다
sujinnaljin.medium.com
[iOS] 차근차근 시작하는 GCD — 4
Serial vs Concurrent(직렬 vs 동시)에 대해 알아봅시다
sujinnaljin.medium.com
https://developer.apple.com/documentation/dispatch/dispatchqueue
DispatchQueue | Apple Developer Documentation
An object that manages the execution of tasks serially or concurrently on your app’s main thread or on a background thread.
developer.apple.com
'iOS💖' 카테고리의 다른 글
[사전캠프 TIL 8일차] Generic (0) 2025.02.13 [사전캠프 TIL 7일차] GCD (DispatchQueue 종류 & 특성) (0) 2025.02.13 [사전캠프 TIL 5일차] GCD (+α), Operation (0) 2025.02.07 [사전캠프 TIL 4일차] 비동기 프로그래밍 (with. GCD 💝) (2) 2025.02.06 [사전캠프 TIL 3일차] ARC / 클로저 / OOP (1) 2025.02.05 - (보통 Main Thread 에서) 분산처리된 작업(task)을 한 개의 thread 에서 처리하는 Queue