无标题文章

首先有几个概念:

同步 针对单个任务来说,在gcd中就是block。任务提交后在执行完返回

异步 针对单个任务来说,在gcd中就是block。任务提交后立即返回

并行队列 针对多个任务来说,在gcd中就是dispatch queue。同时提交任务1,任务2,他俩同时执行

串行队列 针对多个任务来说,在gcd中就是dispatch queue。同时提交任务1,任务2,1执行完2才会执行 

dispatch_async ,dispatch_sync 可以理解为任务1提交到队列中后异步、同步执行,而队列的类型决定了任务1和任务2之间是并行还是串行执行

向串行队列提交异步任务 dispatch_async(serial_queue(),^{xxxxx});

dispatch_async(_serialQueue, ^{ printf("1"); });

printf("2");

dispatch_async(_serialQueue, ^{ printf("3"); });

printf("4");


打印顺序1肯定在3前面,2在3之前(因为3在2打印完后才dispatch)。

1、2、3

2、1、3

唯一区别在于dispatch_sync只会在 block 完全执行完之后返回,

dispatch_async不能确保会在 block 完全执行完之后返回,唯一能确定的是会在被添加到queue 队列后返回。


dispatch_sync(_serialQueue, ^{ printf("1"); });

printf("2");

dispatch_sync(_serialQueue, ^{ printf("3"); });

printf("4");

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容