Ios 调度同步(调度获取全局队列(xxx)、任务)是同步还是异步

Ios 调度同步(调度获取全局队列(xxx)、任务)是同步还是异步,ios,concurrency,queue,dispatch,Ios,Concurrency,Queue,Dispatch,正如苹果的文档所说,dispatch\u get\u global\u queue()是一个并发队列,而dispatch\u sync则是一种表示串行的东西。那么任务是异步处理还是同步处理?苹果文档说 调度\u获取\u全局\u队列 返回给定优先级的已知全局并发队列 水平 调度\u队列\u t调度\u获取\u全局\u队列( 长期优先, 无符号长标志) 参数 优先级正在检索的队列的优先级。暂时 可能值列表,请参阅“调度队列优先级”。标记这个 该值保留供将来使用。您应该始终通过0。返回 值返回请求的全

正如苹果的文档所说,dispatch\u get\u global\u queue()是一个并发队列,而dispatch\u sync则是一种表示串行的东西。那么任务是异步处理还是同步处理?

苹果文档说

调度\u获取\u全局\u队列

返回给定优先级的已知全局并发队列 水平

调度\u队列\u t调度\u获取\u全局\u队列( 长期优先, 无符号长标志)

参数

优先级正在检索的队列的优先级。暂时 可能值列表,请参阅“调度队列优先级”。标记这个 该值保留供将来使用。您应该始终通过0。返回 值返回请求的全局队列

讨论

无法修改已知的全局并发队列。 调用dispatch\u suspend、dispatch\u resume、dispatch\u set\u context和 当与此函数返回的队列一起使用时,like无效 功能

可以执行提交到这些全局并发队列的块 同时对彼此而言

iOS 4.0及更高版本提供了可用性。声明于 调度/队列.h

在讨论中,他们说->“提交的块可以相互同时执行。”


因此任务之间可能是异步处理的。

您正在混淆队列是什么以及异步与同步的含义

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

然后是异步对同步。Async意味着当您调用
dispatch\u Async
时,它将立即返回,并且块将在队列中排队。同步意味着当您调用
dispatch\u Sync
时,它将仅在块完成执行后返回


因此,为了完全回答您的问题,如果您
将\u sync
分派到全局并发队列上,则此块将运行,可能与该队列上的其他块并行运行,但以同步方式运行-即,在块完成之前,它不会返回。

谢谢:-)。当然还有更多的解释空间,但这只是一个开始,我将回答@keywind提出的所有问题。非常感谢您的回答。这里要知道的另一件事是,同步/异步调度在概念上与串行/并发队列正交。只有排队线程关心sync/async(因为这决定了排队线程上的执行是立即恢复,还是在执行块之后恢复)。排队的块本身完全不知道它是同步还是异步提交的。