是dispatch_sync(dispatch_get_global_queue(xxx),task)同步还是异步

key*_*ind 5 queue concurrency dispatch ios

正如Apple的文档所说,dispatch_get_global_queue()是并发队列,dispatch_sync是串行的意思.那么任务是处理异步还是同步?

mat*_*way 33

您在队列是什么以及异步与同步意味着什么之间感到困惑.

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

然后进入异步vs同步.异步意味着当您调用时dispatch_async,它将立即返回,并且该块将在队列中排队.同步意味着当您调用dispatch_sync它时,它将仅在块执行完毕后返回.

因此,要完全回答您的问题,如果您dispatch_sync进入全局并发队列,则此块将运行,可能与该队列上的其他块并行运行,但是以同步方式运行 - 即在块完成之前它不会返回.