ios - 调度同步的目的是什么?

标签 ios objective-c asynchronous synchronous dispatch-async

我很清楚 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/

相关文章:

iphone - 如何用字符串分隔的组件进行json解析

ios - 如何在 Swift 中将字符串转换为 unicode(UTF-8) 字符串?

ios - 按自定义形状裁剪 UIImage

ios - 显示 Xcode 项目名称的 UILocalNotification

objective-c - if 语句没有按我的预期工作

javascript - 等待异步任务完成

c# - c#什么时候需要async和await?

ios - Flex 4.5 Mobile - Facebook 授权

ios - 使用 Alamofire 和不记名 token 序列化对象

Python3并行处理opencv视频帧