티스토리 뷰
GCD (Grand Central Dispatch)
iOS 4부터 시작된 C 언어로 구성된 Thread 방법이다. 기존의 NSThread, NSOperation보다 보다 쉽게 처리가 가능하다는 장점이 있을듯.
멀티코어 프로세서를 위한 Thread 기술을 OS 레벨에서 관리하여 주는 방식이다.
기본적인 GCD의 기능.
1. 직렬큐 : Task를 추가한 순으로 실행되는 큐
let queue = DispatchQueue(label: "TEST")
2. 병렬큐 : Task를 병렬로 처리로 실행하는 큐
let queue = DispatchQueue(label: "TEST", qos: .default, attributes: .concurrent)
3. 메인큐 : Main Thread에서 실행되는 Queue. UI는 이곳에서 동작하도록 개발하여야 함.
let queue = DispatchQueue.main
GCD의 function의 특성.
1. async : Queue에 등록된 다른 Thread에 대해서 처리가 끝나기를 기다리지 않음
2. sync : Queue에 등록된 다른 Thread에 대해서 처리가 끝나기를 기다림.
일반적으로 async방식을 쓰는것을 추천드리며, sync를 잘 못 사용하면 Thread가 교착상태에 들어갈수 있으므로 사용하지 않도록 한다.
GCD 사용법.
1. 간단한 사용 방법. 사용후 메인스레드에서 화면을 고치는 동작들을 하여야 함
DispatchQueue(label: "TEST").async { work() // 작업은 queue에서 처리 DispatchQueue.main.async { afterWork() // 작업이 끝난 이후에는 main에서 처리 } } |
2. 시스템 큐를 이용하는 방법. 이때 얻어지는 Queue는 병렬큐이다.
DispatchQueue.global(qos: .default).async { self.doSomething() } |
qos라는 부분이 있는데 이것은 우선순위를 이야기 하여주는 부분으로 다음과 같은 범위가 있으며, 순서적으로 우선순위가 높다
userInteractive
userInitiated
default
utility
background
unspecified
3. 딜레이를 가지고 사용. (10초 후 실행됨)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(10)) { haha() } |
4. 그룹으로 이용. 모든 작업이 끝난 다음에 다음 처리가 가능하게 됨.
let group = DispatchGroup() let queue1 = DispatchQueue.global(qos: .default) let queue2 = DispatchQueue.global(qos: .default) let queue3 = DispatchQueue.global(qos: .default) queue1.async(group: group) { print("1") } queue2.async(group: group) { print("2") } queue3.async(group: group) { print("3") } group.notify(queue: DispatchQueue.global()) { print("Final Success") } |
5. DispatchWorkItem을 이용하는 방법
let workItem = DispatchWorkItem { print("1") } DispatchQueue.global().async(execute: workItem) // 혹은 workItem.perform()을 이용하면 된다. |
WorkItem을 이용할 경우에, 세부적으로 실행을 언제할지 그리고 실행중에 취소할지에 대한 여부를 정할수 있다.
perform, wait, cancel...
'Mobile > iOS' 카테고리의 다른 글
[iOS/Objective-C] NSCoding, NSCopying (0) | 2017.09.27 |
---|---|
[iOS/Swift] Singleton 사용하기 (0) | 2017.09.27 |
[iOS] Reactive Programming 보기 좋은 링크 (0) | 2017.08.10 |
[iOS] cocoapod 사용하다가 중지하기 (0) | 2017.08.10 |
[iOS][Swift] Version 체크 (0) | 2017.07.01 |
- Total
- Today
- Yesterday
- Java
- github
- Gradle
- Spring
- cocoapods
- windows10
- go
- centos8
- intellij
- golang
- git
- nodejs
- php
- Linux
- ios
- android
- MySQL
- Python
- Kotlin
- enum
- tomcat
- Codable
- Windows
- rxswift
- Xcode
- CentOS
- docker
- SWIFT
- war
- ubuntu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |