GCD (Grand Central Dispacher) - 1
- Concurreny(동시성)에 대한 이해
싱글코어는 Context Switch를 통해 시분할로 동시성을 확보하고, 멀티코어는 Parallelism이라고 해서 스레드를 생성해서 이 스레드를 다른 코어에서 돌림으로써 동시성을 확보한다. (실제로 코어를 사용하는지는 알 수없다.)
GCD는 동시 실행할 코드를 결정하고, 어떠한 형태로 어느 정도의 리소스를 투입할 것인지를 결정한다. 쓰레드의 생성과 관리 등을 GCD가 한다고 보면 된다.
! 개념적으로 시분할이 아니고 동시에 2개의 쓰레드가 아무런 제약 없이 돌 수 있다는 점을 생각해야 한다는 것이다.
- Queue의 종류에 대한 이해
두 번째로 생각 해 볼 것은 큐의 종류이다.
GCD는 FIFO(선입선출)의 형태로 실행된다.
dispatch_queue 함수의 경우는 thread safe 함수라 별도로 동시 접근에 대한 처리를 할 필요가 없다.
Serial Queue의 경우는 각각의 테스크를 순차적으로 실행하므로 예측이 가능하지만, 상대적으로 성능이 떨어진다.
Concurrnet Queue의 경우는 실행 순서는 있지만 끝나는 순서가 없어서 예측이 안되지만, 상대적으로 성능이 좋다.
큐의 종류는 상황에 맞추어 결정해서 GCD를 사용하면 된다.
- GCD에서 제공하는 Queue 타입
- The Main dispatch queue (serial, pre-defined)
- Global queues (concurrent, pre-defined)
- Private queues (can be serial or concurrent, you create them)
메인 큐의 경우 우리가 생각하는 그 메인 큐이고, UI를 그릴 때는 이 메인 큐를 사용한다. Serial 형태임을 주의해야 한다.
글로벌 큐의 경우 sync/async를 선택할 수 있고, 흔히 벡 그라운드에서 동작한다고 보면 된다.
프라이빗 큐의 경우 정의를 통해 사용할 수 있다.
! Concurrent 형태로 사용하면 main thread에서 UI 업데이트가 진행되고 있음을 유의해야 한다.
! async 형태로 사용하면 queue에 있는 여러 개의 task가 동시에 진행되고 있음을 유의해야 한다.
- Qos(Quality of Service)
동작해야 하는 속도나 상황에 맞추어 설정합니다.
실행 속도 측면에서 보면 아래의 순서로 우선순위를 가집니다.
정리 :
1. GCD는 추상화된 개념으로 thrad를 생성하고 관리하는 역할을 한다.
2. 하고자 하는 작업에 따라 맞는 큐를 사용해야 하고 (serial, concurrent) 큐 안에서의 작업의 실행도 동시에 할 것인지 (sync, async) 정해야 한다. 마지막으로 Qos를 설정하여, 스레드의 우선순위를 추가 조정할 수 있다.
다음에는 코드로 GCD의 사용 방법을 익혀보자
2022.03.31 - [iOS] - GCD (Grand Central Dispacher) - 2 (케이스 스터디)
GCD (Grand Central Dispacher) - 2 (케이스 스터디)
오늘은 GCD의 사용 케이스를 코드로 알아본다. (objectiveC)를 사용한다. 1. 지연 실행 가장 간단한 사용 방법이고, xx초 후에 메인 큐에 주석처리되어있는 작업을 메인 스레드에서 실행하도록 하는
iosdevhistory.tistory.com
참고:
https://medium.com/geekculture/threads-in-ios-gcd-nsoperation-part-1-64e460c0bdea