Upload
-
View
231
Download
1
Embed Size (px)
Citation preview
GCD (Grand Central Dispatch) iOS & OS X 멀티스레딩 기법
아프리카TV 기술연구소 모바일개발팀전임연구원 정창욱
2013. 11.
● OpenMP
● OpenCL
● GCD
Concurrent, Multi threading and processing
GCD의 특징
● Multi Thread and Processing 코드를 간결하고 쉽게 구현 가능
● C 언어로 되어 있는 Thread 관리 기술
● C 언어의 Block 기반으로 실행
● OS가 지능적으로 Task(Thread) 스케쥴링
GCD - Dispatch Queue Type
123 run4
Dispatch Queue
OS kernal
worker thread
GCD - Dispatch Queue Type
123 run
Serial Dispatch Queue
123 run
Concurrent Dispatch Queue
run
run
worker thread
worker thread
worker thread
worker thread
GCD - Dispatch Queue Type
Serial - Main Dispatch Queue
Concurrent - Global Dispatch Queue
GCD - 생성 및 얻기
● dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr);
● dispatch_queue_t dispatch_get_main_queue(void);
● dispatch_queue_t dispatch_get_global_queue(long priority,unsigned long flags);
GCD - 실행 및 제어● void dispatch_async(
dispatch_queue_t queue,dispatch_block_t block);
● void dispatch_barrier_async(dispatch_queue_t queue,dispatch_block_t block);
● void dispatch_sync(dispatch_queue_t queue,dispatch_block_t block);
시간
task
task
task
task
task
task
task
dispatch_async dispatch_async
dispatch_barrier_async
Concurrent dispatch queue
GCD - 실행 및 제어● void dispatch_apply(
size_t iterations,dispatch_queue_t queue,void (^block)(size_t));
GCD - 실행 및 제어
● void dispatch_set_target_queue(dispatch_object_t object,dispatch_queue_t queue);
● void dispatch_after(dispatch_time_t when,dispatch_queue_t queue,dispatch_block_t block);
GCD - 실행 및 제어
● void dispatch_group_async(dispatch_group_t group,dispatch_queue_t queue,dispatch_block_t block);
● void dispatch_group_notify(dispatch_group_t group,dispatch_queue_t queue,dispatch_block_t block);
GCD - 실행 및 제어
● void dispatch_suspend(dispatch_object_t object);
● void dispatch_resume(dispatch_object_t object);
● void dispatch_once(dispatch_once_t *predicate,dispatch_block_t block);