dispatch_sync(dispatch_get_global_queue(xxx),任务)同步或asynchronous

正如苹果的文档所说,dispatch_get_global_queue()是一个并发队列,dispatch_sync是串行的意思。那么这些任务是asynchronous还是同步?

您在排队和asynchronousvs同步之间感到困惑。

队列是可以运行块的实体。 这些可以是串行或并发的。 串行意味着,如果你按照A,B,C,D的顺序放置块,那么它们将被执行A,然后是B,然后是C,然后是D.并发意味着这些相同的块可能以不同的顺序执行并且可能甚至在同一时间多于一个(显然,假设你有多个核心运行)。

然后到asynchronous与同步。 Async意味着当你调用dispatch_async ,它将立即返回并且该块将在队列中排队。 同步意味着当你调用dispatch_sync ,只有在块完成执行后才会返回。

因此,为了完全回答你的问题,如果你dispatch_sync到一个全局的并发队列中,那么这个块将被运行,或许与该队列中的其他块并行运行,但是以同步的方式运行 – 也就是说,直到块完成后才会返回。

苹果医生说

dispatch_get_global_queue

返回给定优先级的众所周知的全局并发队列。

dispatch_queue_t dispatch_get_global_queue(长优先级,无符号长标志);

参数

优先级正在检索的队列的优先级。 有关可能值的列表,请参阅“dispatch_queue_priority_t”。 标志该值保留供将来使用。 您应该始终传递0.返回值返回请求的全局队列。

讨论

众所周知的全局并发队列不能被修改。 调用dispatch_suspend,dispatch_resume,dispatch_set_context等与此函数返回的队列一起使用时无效。

提交给这些全局并发队列的块可以相对于彼此同时执行。

可用性iOS 4.0及更高版本中提供。 在dispatch / queue.h中声明

在讨论中,他们表示,“提交的数据块可以同时处理。”

所以任务可能会彼此处理asynchronous。