正如Apple的文档所说,dispatch_get_global_queue()是一个并发队列,而dispatch_sync是串行的意思。那么任务是处理异步还是同步?
答案 0 :(得分:33)
你对队列是什么以及异步与同步意味着什么感到困惑。
队列是可以运行块的实体。这些可以是串行或并发的。串行意味着如果你按照A,B,C,D的顺序放置块,那么它们将被执行A,然后是B,然后是C,然后是D.并发意味着这些相同的块可能以不同的顺序执行,并且可能甚至多于一个(假设您有多个核心可以运行,显然)。
然后进入异步vs同步。异步意味着当您调用dispatch_async
时,它将立即返回 ,并且该块将在队列中排队。同步意味着当您调用dispatch_sync
时,它将仅在块执行完毕后返回。
所以要完全回答你的问题,如果你dispatch_sync
进入一个全局并发队列,那么这个块将会运行,可能与该队列上的其他块并行,但是以同步的方式运行 - 即它不会返回直到块完成。
答案 1 :(得分:0)
Apple Doc说
dispatch_get_global_queue
返回给定优先级的众所周知的全局并发队列 水平。
dispatch_queue_t dispatch_get_global_queue( 长期优先, 无符号长旗);
参数
priority要检索的队列的优先级。为一个 可能值列表,请参阅“dispatch_queue_priority_t”。这个 值保留供将来使用。你应该总是传递0.返回 值返回请求的全局队列。
讨论
无法修改众所周知的全局并发队列。 调用dispatch_suspend,dispatch_resume,dispatch_set_context和 与此返回的队列一起使用时,它们没有任何效果 功能
可以执行提交给这些全局并发队列的块 同时相互之间。
可用性适用于iOS 4.0及更高版本。宣告进入 调度/ queue.h
在讨论中他们说过 - > '提交的块可以彼此同时执行。'
因此可以处理任务彼此异步。