WooKoo Blog

물과 같이

개발/개발

[iOS] - GCD란???

WooKoo 2020. 5. 27. 15:52

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개가 있고

시스템에서 제공하는 메인큐(시어리얼), 글로벌 큐(컨커렌트)가 있다.


출처

https://magi82.github.io/gcd-01/