GCD(Grand Central Dispatch)
- 멀티코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍 기술을 애플에서 개발한 기능
- 멀티프로세싱에 관한 작업을 프로그래머가 아닌 운영체제에서 관리를 할 수 있도록 지원
- GCD에서 Queue , Sync & Async를 관리한다.
- 일련의 Task의 과정들을 안정적으로 진행되고, 작업될 수 있도록 도와주는 시스템
Async - 동시 다발적으로 일을 처리하는 비동기적 방식
Sync - 모두 기다렸다가 일을 처리하는 동기적 방식
[개발자가 설정하고 해야할 목록]
1. Queue
2. Sync & Async
위의 두 가지를 사용해서 설정해주면 된다.
DispatchQueue의 세가지
-The Main Queue
[참조] https://developer.apple.com/documentation/dispatch/dispatchqueue/1781006-main
-현재 프로세스의 메인스레드의 Dispatch Queue와 관련되어있다.
-이 시스템에서 자동적으로 메인 큐가 생성되고, 당신의 애플리케이션의 메인스레드에 포함된다.
-메인큐에서 접근할 수 있는 세가지 항목은 다음과 같다.
-
Calling dispatchMain()
-
Starting your app with a call to UIApplicationMain(_:_:_:_:) (iOS) or NSApplicationMain(_:_:) (macOS)
-
Using a CFRunLoop on the main thread
Example Code |
DispatchQueue.main.async { UIApplicationMain(updateUI가 주를 이룬다.} DispatchQueue.main.sync{ UIApplicationMain(updateUI가 주를 이룬다. } |
대개는 작업시간이 짧은 일련의 작업들이 주를 이룬다.
-The Global Queue
[참조]https://developer.apple.com/documentation/dispatch/os_dispatch_queue_global
- 동시 실행을 위한 태스크를 예약하는 시스템에서 제공하는 전송 대기열입니다.
- 사용자가 이 타입의 객체를 직접적으로 생성할 수 없다. 사용자는 DispatchQueue 객체를 새로 생성했을때 type에 관련된 큐를 받아서 사용한다.
QoS(Quality of Service)의 5가지 타입으로 나뉘어서 작업의 우선순위를 결정한다.
1) userInteractive
- 메인스레드에서 사용자 UI적인 작업
2) userInitiated
- 몇초 안걸리는 작업들
3) default
- 기본적인 설정들
4) utilty
- 수초에서 수분정도 걸리는 일련의 작업들
- 무거운 작업에 사용
5) background
- 작업이 오래걸리거나 수분, 수시간 걸리는 작업등에 적합
Example Code |
DispatchQueue.global(qos: .background).async{} 형태로사용 |
The Custom Que
- 직업 큐를 생성해서 관리할 때 사용.
- 직접 생성해서 사용이 가능하다.
Example Code |
let concurrentQueue = DispatchQueue(label: “concurrent”, qos:.background, attribute: .concurrent) |
[별개 참조소스]
- 서로 의존성이 있는 두 개의 큐를 같이 사용하는 방법
[설명] 이미지를 다운로드 받고 받은 이미지를 UI화면에 출력할 때가 적절한 예시
DispatchQueue.global(qos: .background).async{
let image = downloadImageFromServer()
DispatchQueue.main.async {
self.imageView.image = image
}
}
'Swift' 카테고리의 다른 글
01. Swift Process+Thread(개념) (0) | 2019.06.19 |
---|