结论
- 使用串行队列调用dispatch_sync时,队列中的block在主线程同步(按顺序)执行
- 使用串行队列调用dispatch_async时,GCD新增一个子线程,队列中的block在这个子线程(非主线程)同步(按顺序)执行。
- 使用并行队列调用dispatch_sync时,队列中的block在主线程同步(按顺序)执行,效果与使用串行队列调用dispatch_sync相同
- 使用并行队列调用dispatch_async时,队列中的block在多个子线程异步执行、特殊的一点是,当并行队列中的block数目超过可调度线程总数时,未能获得子线程的block将不执行,直至有子线程空闲
测试
设备环境
OS X EI-Capitan
处理器 2.5 GHz Intel Core i5 双核
串行队列与dispatch_sync
队列中的block在主线程同步(按顺序)执行
测试代码:
+ (void)testQueue{
NSString *label = @"label";
dispatch_queue_t queue = dispatch_queue_create([label UTF8String], DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue, ^{
NSThread *thread = [NSThread currentThread];
NSLog(@"current thread:%@", thread);
for (int i=0; i<5; i++) {
NSLog(@"block1: %d", i);
}
});
dispatch_sync(queue, ^{
NSThread *thread = [NSThread currentThread];
NSLog(@"current thread:%@", thread);
for (int i=0; i<5; i++) {
NSLog(@"block2: %d", i);
}
});
dispatch_sync(queue, ^{
NSThre