[iOS] Thread, DispatchGroup

2020. 5. 23. 13:22iOS

1. DispatchQueue

1) DispatchQueue

작업항목의 실행을 관리하는 클래스이다. 대기열(Queue - FIFO)에 추가된 작업항목은 시스템이 관리하는 Thread가 처리하고 작업 완료시 자동 해제한다. 일반 Thread 코드보다 쉽고 효율적으로 코드를 작성 가능하다. DispatchQueue를 생성 시 기본은 Serial이며, Concurrent 유형으로 변경 시 별도로 명시가 필요하다. 주로 iOS에서는 서버에서 데이터를(이미지, 동영상, 멀티미디어, 등) 내려받을 경우, CPU사용량이 많은 처리를 별도의 Thread에서 처리한 뒤 Main Thread로 결과를 전달하여 화면에 출력한다.

2) Process

운영체제에서 실행중인 프로그램이다. 작업이 여러 개 이루어지고 있을 경우 Multi-Process, Multi-Process를 처리하는 과정을 Multi-Tasking이라 정의한다.

3) Thread

각 Process 내에서 실행되는 세부 작업의 단위이며, 여러 Thread가 모여 하나의 Process를 구성한다. 한번에 하나씩 동작하며 어떤 Thread가 먼저 실행이 될지 모른다.

4) 동작 과정

운영체제에서 프로그램 실행을 하여 Process가 동작할 때, 이를 구성하고 있는 Thread를 하나씩 CPU에게 전달한다.

5) 동기화

하나의 메서드나 동작을 여러 개의 Thread가 한번에 사용하면 프로그램이 멈추는 DeadLock 현상이 발생한다. DeadLock 현상을 방지하기 위해 동기화/비동기화로 제어한다.

6) DispatchQueue 사용법 (1)

global은 Concurrent Queue로 동작한다. sync의 경우, 하나의 작업이 끝날 때까지 다른 작업을 수행하지 않지만, async는 동시에 수행하기에 출력 결과가 뒤섞여 동작한다.

DispatchQueue 사용법 (1)

5) DispatchQueue 사용법 (2)

DispatchQueue 사용법 (2)

※ Serial : 순서대로 한번에 하나의 Task를 수행
※ Concurrent : 동시에 하나 이상의 Task를 수행하며, Queue에 추가된 순서대로 시작
※ Main DispatchQueue : 앱의 Main Thread에서 Task를 수행하는 Serial Queue
※ DispatchQueue를 사용하면 한번에 하나의 Task만 자원을 수정하도록 할 수 있음

 

 

 

2. DispatchGroup

1) Main.storyboard

Main.storyboard

2) ViewController

ViewController (1)
ViewController (2)

3) 구현 화면

구현 화면


[참고] github.com/ozofweird/iOS_Thread_DispatchQueue
[참고] github.com/ozofweird/iOS_Thread_DispatchGroup
[참고] www.youtube.com/watch?v=lOI0aUkeuLw
[참고] zeddios.tistory.com/516
[참고] magi82.github.io/gcd-01/
[참고] baked-corn.tistory.com/134
[참고] www.raywenderlich.com/5370-grand-central-dispatch-tutorial-for-swift-4-part-1-2

728x90

'iOS' 카테고리의 다른 글

[iOS] 연락처 앱  (0) 2020.05.23
[iOS] Userdefaults, CoreData  (0) 2020.05.23
[iOS] 메모장 앱 (3)  (0) 2020.05.23
[iOS] 메모장 앱 (2)  (0) 2020.05.23