-
[iOS] GCD : 1. 동시성(Concurrency) 프로그래밍iOS 2021. 9. 18. 16:13
목차
1. GCD
2. 동시성(Concurrency)
3. DispatchQueue
1. GCD
GCD(Grand Central Dispatch)는 멀티 스레드를 관리하기 위한 API 입니다. 멀티 스레드를 다루기란 쉽지 않지만, GCD는 작업할 closure를 제출하기만 해도 관리해주기 때문에 편리합니다. Queue의 작업들이 스레드에 할당되고, 사용 가능한 시스템 리소스에 따라 필요한 병렬 처리량을 결정하는 등의 일들이 GCD에 의해 수행되기 때문에 스레드를 직접 관리하는 것보다 편의성이 증가하고 성능이 증가하게 되었습니다.
2. 동시성(Concurrency)
동시성이란 사실 동시에 실행되는 것 처럼 보인다는 말입니다. 하나의 코어를 가지고 두 개의 스레드를 작업한다고 생각해봅시다. 스레드 A가 종료되고 난 뒤에 스레드 B가 시작된다면 동시성이 없는 것입니다. 하지만 스레드 A와 스레드 B 가 차례대로 조금씩 번갈아 실행된다면 동시성이 있는 것입니다.
병렬성 vs 동시성 첫번째 Parallelism 그래프에서는 스레드 2개가 병렬적으로 실행되고 있습니다. 정말로 동시에 실행되고 있는 것이죠. 하지만 코어가 한 개라면 두 개의 스레드가 슬라이싱없이 동시에 실행되는건 불가능합니다. 그 아래의 동시성 그래프를 보면 스레드가 time slicing되어 한개의 코어에 번갈아 가며 실행되는 것을 볼 수 있습니다. 마치 동시에 실행되는 것 마냥 빠르게 번갈아가며 실행되는 것입니다.
3. DispatchQueue
DispatchQueue는 작업할 코드 블록(closure)을 담을 FIFO 큐입니다. 큐에 있는 작업들이 먼저 들어온 순서대로 스레드풀(a pool of threads)에서 실행됩니다. 큐는 2개의 타입이 있는데 하나는 Serial(직렬), 또 하나는 Concurrent(동시) 큐 입니다. Serial 큐는 동기적으로 수행됩니다. 앞의 작업이 끝날때까지 뒤의 작업은 계속 대기하는 것이죠. 하지만 Concurrent 큐는 동시에 실행됩니다. 단일 코어라면 스레드를 time slicing 하여 실행하고 멀티코어라면 각 코어에 할당하여 실행하는 등의 작업을 하는 것입니다. Serial 큐는 Dispatch.sync , concurrent 큐는 Dispatch.async 로 표현됩니다.
Serial Queue Concurent Queue Reference
https://developer.apple.com/documentation/dispatch/dispatchqueue
https://www.raywenderlich.com/5370-grand-central-dispatch-tutorial-for-swift-4-part-1-2
'iOS' 카테고리의 다른 글
[출시를 향한 여정] 타이머 어플 - 3. LED 플래시를 통해 알림받기 (0) 2021.10.23 [출시를 향한 여정] 타이머 어플 - 2. 시간 설정, 백그라운드/포그라운드 전환 구현 (0) 2021.10.03 [iOS] View Controller의 생명주기 (0) 2021.09.04 Delegate 패턴 (0) 2021.08.28 [출시를 향한 여정] 타이머 어플 - 1. 타이머 어플을 만드려는 이유 (0) 2021.08.15