GCD 란
Multicore Process 를 위한 Thread programming 의 방법이다.
기존의 스레드 관리는 직접 락을 걸고, 스레드풀을 관리하는 수고가 있었지만
GCD는 스레드를 OS 에서 관리하고 분배한다.
Dispatch Queue
Dispatch Queue는 작동방식이 Serial이든 Concurrent든 항상 FIFO ( First in First out ) 방식으로 동작한다.
Queue 의 동작방식
Serial Queue -> 동작이 순차적으로 FIFO 한다.
Concurrent Queue -> 동작이 동시적으로 GCD 에서 컨트롤하여 FIFO 한다.
Queue 의 종류
여러가지의 Queue 중에 대표적으로 main과 global 이있다.
DispatchQueue.main
시스템시작시 자동으로 생성하는 메인스레드 큐 이다.
기본적으로 Serial Queue 로 동작한다.
대표적인 예로 UI 변경작업은 메인큐에서 실행해야한다.
DispatchQueue.global
메인스레드 큐 와 반대되는 개념으로 백그라운드에서 동작하는 큐이다.
기본적으로 Concurrent Queue로 동작한다.
대표적인 예로 서버와의 통신작업같은경우 시간이 얼마나 걸릴지 모르고 작업량이 많기때문에
백그라운드로 실행하여 후처리를 메인큐에서 하는경우가있다.
Qos 를 활용하여 우선순위를 설정해줄수있다
DispatchGroup
여러가지 작업을 동시에 실행할때 Group을 Concurrent queue 로 작업하여 결과물을 빠르게 얻는다
Group queue는 실행되는 작업이 다 완료되었을때 Notify 를 호출하여 끝났다는 신호를 준다
Qos (Quality of Service)
작업을 Multi-threading & Concurrent 하게 실행하고자 할때 Qos 를 정의한 Global queue 를 사용한다
userInteractive
중요도가 높고 즉각적인 반응이 요구되는 작업을 실행할때 사용하는 Qos
UI 업데이트같은 유저의 액션에 즉각적으로 반응해야하는 작업이 필요할때 사용
Global queue 지만 main-thread 에서 실행된다
userInitiated
userInteractive 에 비해 우선순위는 낮지만 async 하고 빠른결과값을 기대할때 사용
utility
시간이 상대적으로 오래걸리는 작업을 위해 사용
I/O, 통신 등의 작업에 주로 사용
background
유저가 인지하지도 못하는 백단에서 실행되는 작업
utility 에 비해 상대적으로 천천히 작업하는경우 사용
Sync, Async
Sync
큐에 등록한 스레드가 작업이 끝날때까지 대기하고 작업이 끝났다는 신호가 오면 다음 큐를 실행한다. ( 등록해놓은 큐를 순차적으로 실행한다 )
Async
큐에 등록한 스레드가 작업이 끝날때까지 대기하지않고 다음 큐를 병렬로 실행한다. ( 등록해놓은 큐를 동시적으로 실행한다 )
차이점은 작업이 완료될때까지 기다리느냐 아니냐의 차이이다.
Sync 같은 경우 사용법을 제대로 숙지하지않으면 스레드가 죽지않는 교착상태에 빠질 수가있어 되도록이면 Async를 사용하는게 좋다.
After
큐에 등록한 스레드에 시간차를 두어 실행 할 수 있게 한다.
'Swift' 카테고리의 다른 글
[Swift] ALC ( App Life Cycle ) (0) | 2017.11.08 |
---|---|
[Swift] Thread (0) | 2017.11.07 |
[Swift] Email, Password Validation extension (이메일, 비밀번호 검증) (0) | 2017.05.25 |
[Swift] String Trim extension (문자열 공백 삭제) (0) | 2017.03.20 |
[Swift] 아이폰 해상도에 따른 Font size 조절 (0) | 2017.03.20 |