티스토리 뷰

Mobile/iOS

[iOS/Swift] Swift3 GCD 조금 더...

out of coding 2017. 9. 27. 14:07

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...


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함