iOS에서는 쉽고 편한 멀티 스레딩 처리를 위해 두가지 API를 제공합니다.
1. GCD(Grand Central Dispatch)라는 C기반의 저수준 API
2. NSOperation이라는 Obj-C 기반의 고수준 API
2번은 1보다 약간의 오버헤드가 더 발생하고 느리다.
GCD를 사용하기전에 알아야할 클래스
DispatchQueue이다.
실제로 해야할 Task를 담아두면 선택된 스레드에서 실행해준다.
DispatchQueue는 2가지로 나뉜다.
1. Serial Dispatch Queue
- 등록된 작업을 한번에 하나씩 차례대로 처리합니다. 처리중인 작업이 완료되면 다음 작업을 처리합니다.
2. Concurrent DisPatch Queue
- 등록된 작업을 한번에 하나씩 처리하지 않고 여러 작업들을 동시에 처리한다.
앱 실행 시 시스템에서 기본적으로 두 개의 큐를 만든다.
1. Main Queue
- 메인 스레드(UI 스레드에서 사용되는)에서 사용되는 Serial Queue이다.
- 모든 UI 처리는 메인 스레드에서 처리해야한다.
2. Global Queue
- 편의상 사용할 수 있게 만든 Concurrent Queue이다.
- 처리 우선 순위를 위한 qos(Quality of service) 파라메터를 제공한다.
- 병렬적으로 동시에 처리를 하기 때문의 작업 완료의 순서를 정할 순 없지만 우선적 일을 처리 가능하다.
*Qos 우선순위
1. userInteractive
2. userInitalted
3. default
4. utility
5. background
6. unspecified
sysn(동기) / async(비동기)
Dispatch Queue는 다음과 같은 메소드들을 가지고 있다.
- sysn : 해당 작업을 처리하는 동안 다음으로 진행되지않음
- async : 처리하라고 지시 후 다음으로 넘어간다.
결론:
디스패치 큐는 시리얼, 컨커렌트 2개가 있고
시스템에서 제공하는 메인큐(시어리얼), 글로벌 큐(컨커렌트)가 있다.
출처
'개발 > 개발' 카테고리의 다른 글
[Swift] - Generic(제네릭) (0) | 2020.05.28 |
---|---|
[iOS] - Hashable Protocol 은 무엇일까요??? (0) | 2020.05.27 |
[iOS] - 코코아 터치 프레임워크란? (0) | 2020.05.27 |
[iOS] - Foundation Kit이란? (0) | 2020.05.27 |
[iOS] - 강한참조 약한 참조(Strong capture and weak capture) (0) | 2020.05.08 |