GCD中的dispatch_sync与串行、并行队列组合执行结果测试

FengxinLiIP属地: 四川
字数 298

我自己开始也有疑惑,那就是为什么dispatch_sync 总是在主线程执行。下面串行和并行队列都是打印出主线程。
并行队列
dispatch_queue_t concurrentQueue= dispatch_queue_create("串行队列", DISPATCH_QUEUE_CONCURRENT); dispatch_sync(concurrentQueue, ^{ NSLog(@"任务执行中333%@",[NSThread currentThread]); });
串行队列
dispatch_queue_t serialQueue= dispatch_queue_create("串行队列", DISPATCH_QUEUE_SERIAL); dispatch_sync(serialQueue, ^{ NSLog(@"任务执行中222%@",[NSThread currentThread]); });

Barrier[14137:166266] 任务执行中333<NSThread: 0x600003f22240>{number = 1, name = main} 2019-02-14 11:40:20.997570+0800 Barrier[14137:166266] 任务执行中222<NSThread: 0x600003f22240>{number = 1, name = main}
总结如下
dispatch_sync:同步任务无论在自定义串行队列、自定义并行队列、主队列(当前线程为主线程时会出现死锁)、全局队列 执行任务时,都不会创建子线程,而是在当前线程中串行执行;

dispatch_async:异步任务无论在自定义串行队列、自定义并行队列(主队列除外,主队列下,任务会在主线中串行执行)、全局队列 执行任务时,都会创建子线程,并且在子线程中执行;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
0人点赞
FengxinLi学习如逆水行舟,不进则退
总资产5共写了5.3W字获得266个赞共197个粉丝

全部评论0只看作者
按时间倒序
按时间正序

推荐阅读更多精彩内容