我很清楚 dispatch_async 队列在执行什么,但我不清楚 dispatch_sync 的目的是什么。例如:这之间有什么区别:
NSLog(@"A");
NSLog(@"B");
还有这个:
dispatch_sync(dispatch_get_main_queue(), ^ {
NSLog(@"A");
});
NSLog(@"B");
据我所知,两种方式的输出都是 A,然后是 B。因为同步是按照写入的顺序执行的。谢谢。
最佳答案
顾名思义,dispatch_sync
可以同步要执行的任务,即使它们不在主队列上执行也是如此。
Saheb Roy's答案只对了一半。您只能指定应在其上执行代码的调度队列。实际线程由 GCD 选择。
在并发队列上使用 dispatch_async 调度的代码块也以 FIFO 方式执行,并保证按照您调度它们的顺序执行。 主要区别 是串行队列上的 dispatch_sync 还可以保证在前一个代码块完成执行之前不会执行后续代码块。 dispatch_sync
正在阻塞您当前的调度队列,即执行 dispatch_sync 调用的队列。因此,您的调用函数会被阻塞,直到分派(dispatch)的代码块返回,而 dispatch_async
会立即返回。
在并发队列上使用 dispatch_async
的执行时间线我看起来像这样:
区 block A [................]
B block [.....]
Block C [....]
在串行队列上使用 dispatch_sync
时如下所示:
区 block A [................]
B block [.....]
Block C [....]
关于ios - 调度同步的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32347843/