iOS 개발/iOS

dispatch_queue 의 sync, async 와 Thread 의 관계

beankhan 2017. 2. 23. 15:14


결론

Queue 의 동작과 Thread 와는 관계가 없다.


dispatch_sync 로 실행했다면 실행한 Thread 에서,

dispatch_async 로 실행했다면 WorkerThread 에서 동작한다.


Queue type 이 SERIAL 인지 CONCURRENT 인지는 중요하지 않다.



Test code

Serial Queue

dispatch_queue_t serialQueue = dispatch_queue_create("serial", DISPATCH_QUEUE_SERIAL);

    

    dispatch_sync(serialQueue, ^{

        NSLog(@"serialQueue_sync : %@", [NSThread isMainThread] ? @"YES" : @"NO");

        //YES

    });


    dispatch_async(serialQueue, ^{

        NSLog(@"serialQueue_async : %@", [NSThread isMainThread] ? @"YES" : @"NO");

        //NO

    });



Concurrent Queue (Global Queue)

dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURRENT);


    dispatch_sync(concurrentQueue, ^{

        NSLog(@"concurrentQueue_sync : %@", [NSThread isMainThread] ? @"YES" : @"NO");

        //YES

    });


    dispatch_async(concurrentQueue, ^{

        NSLog(@"concurrentQueue_async : %@", [NSThread isMainThread] ? @"YES" : @"NO");

        //NO

    });