gcd(i os & os x 멀티스레딩 기법)

18
GCD (Grand Central Dispatch) iOS & OS X 멀티스레딩 기법 아프리카 TV 기술연구소 모바일개발팀 전임연구원 정창욱 2013. 11.

Upload: -

Post on 25-May-2015

231 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Gcd(i os & os x 멀티스레딩 기법)

GCD (Grand Central Dispatch) iOS & OS X 멀티스레딩 기법

아프리카TV 기술연구소 모바일개발팀전임연구원 정창욱

2013. 11.

Page 2: Gcd(i os & os x 멀티스레딩 기법)

● OpenMP

● OpenCL

● GCD

Concurrent, Multi threading and processing

Page 3: Gcd(i os & os x 멀티스레딩 기법)
Page 4: Gcd(i os & os x 멀티스레딩 기법)
Page 5: Gcd(i os & os x 멀티스레딩 기법)
Page 6: Gcd(i os & os x 멀티스레딩 기법)
Page 7: Gcd(i os & os x 멀티스레딩 기법)
Page 8: Gcd(i os & os x 멀티스레딩 기법)
Page 9: Gcd(i os & os x 멀티스레딩 기법)

GCD의 특징

● Multi Thread and Processing 코드를 간결하고 쉽게 구현 가능

● C 언어로 되어 있는 Thread 관리 기술

● C 언어의 Block 기반으로 실행

● OS가 지능적으로 Task(Thread) 스케쥴링

Page 10: Gcd(i os & os x 멀티스레딩 기법)

GCD - Dispatch Queue Type

123 run4

Dispatch Queue

OS kernal

worker thread

Page 11: Gcd(i os & os x 멀티스레딩 기법)

GCD - Dispatch Queue Type

123 run

Serial Dispatch Queue

123 run

Concurrent Dispatch Queue

run

run

worker thread

worker thread

worker thread

worker thread

Page 12: Gcd(i os & os x 멀티스레딩 기법)

GCD - Dispatch Queue Type

Serial - Main Dispatch Queue

Concurrent - Global Dispatch Queue

Page 13: Gcd(i os & os x 멀티스레딩 기법)

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);

Page 14: Gcd(i os & os x 멀티스레딩 기법)

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

Page 15: Gcd(i os & os x 멀티스레딩 기법)

GCD - 실행 및 제어● void dispatch_apply(

size_t iterations,dispatch_queue_t queue,void (^block)(size_t));

Page 16: Gcd(i os & os x 멀티스레딩 기법)

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);

Page 17: Gcd(i os & os x 멀티스레딩 기법)

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);

Page 18: Gcd(i os & os x 멀티스레딩 기법)

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);