【发布时间】:2012-04-07 00:37:00
【问题描述】:
正如苹果文档所说,dispatch_get_global_queue()是并发队列,dispatch_sync是串行的意思。那么任务是异步处理还是同步处理?
【问题讨论】:
标签: ios concurrency queue dispatch
正如苹果文档所说,dispatch_get_global_queue()是并发队列,dispatch_sync是串行的意思。那么任务是异步处理还是同步处理?
【问题讨论】:
标签: ios concurrency queue dispatch
您对什么是队列以及异步与同步的含义感到困惑。
队列是可以在其上运行块的实体。这些可以是串行的或并发的。串行意味着如果你按照 A、B、C、D 的顺序放置块,那么它们将被执行 A,然后是 B,然后是 C,然后是 D。并发意味着这些相同的块可能会以不同的顺序执行,并且可能甚至不止一个(假设你有多个内核可以运行,显然)。
然后进入异步与同步。异步意味着当你调用dispatch_async 时,它会立即返回,并且块会在队列中排队。同步意味着当你调用dispatch_sync时,它只会在块执行完毕后返回。
因此,要完全回答您的问题,如果您将dispatch_sync 加入全局并发队列,则该块将运行,可能与该队列上的其他块并行运行,但以同步方式 - 即它不会返回,直到块完成了。
【讨论】:
苹果文档说
dispatch_get_global_queue
返回给定优先级的众所周知的全局并发队列 级别。
dispatch_queue_t dispatch_get_global_queue( 长期优先, 无符号长标志);
参数
priority 正在检索的队列的优先级。为一个 可能值列表,请参阅“dispatch_queue_priority_t”。标记这个 值保留以供将来使用。你应该总是传递 0。返回 Value 返回请求的全局队列。
讨论
众所周知的全局并发队列无法修改。 调用 dispatch_suspend、dispatch_resume、dispatch_set_context 和 与 this 返回的队列一起使用时,like 无效 功能。
提交到这些全局并发队列的块可能会被执行 同时相对于彼此。
可用性 适用于 iOS 4.0 及更高版本。宣布于 dispatch/queue.h
在讨论中他们说->“提交的块可以同时执行。”
因此任务可以彼此异步处理。
【讨论】: