无标题文章

首先有几个概念:

同步 针对单个任务来说,在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");

你可能感兴趣的:(无标题文章)