Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 大中央调度异步与同步_Iphone_Ios_Grand Central Dispatch - Fatal编程技术网

Iphone 大中央调度异步与同步

Iphone 大中央调度异步与同步,iphone,ios,grand-central-dispatch,Iphone,Ios,Grand Central Dispatch,我正在阅读GCD调度队列上的文档,其中说队列是FIFO,所以我想知道这对异步/同步调度有什么影响 据我所知,async按顺序执行,而sync按顺序执行 但是当你写你的GCD代码时,你决定事情发生的顺序。。因此,只要您知道代码中发生了什么,您就应该知道事情的执行顺序 我的问题是,异步的好处在哪里?在我对这两件事的理解中是否遗漏了什么。同步意味着函数将阻止当前线程,直到它完成为止;异步意味着它将在后台处理,并且函数不会阻止当前线程 如果您想串行执行块,请检查串行调度队列的创建,不幸的是,第一个答案不

我正在阅读GCD调度队列上的文档,其中说队列是FIFO,所以我想知道这对异步/同步调度有什么影响

据我所知,async按顺序执行,而sync按顺序执行

但是当你写你的GCD代码时,你决定事情发生的顺序。。因此,只要您知道代码中发生了什么,您就应该知道事情的执行顺序


我的问题是,异步的好处在哪里?在我对这两件事的理解中是否遗漏了什么。

同步意味着函数将阻止当前线程,直到它完成为止;异步意味着它将在后台处理,并且函数不会阻止当前线程


如果您想串行执行块,请检查串行调度队列的创建,不幸的是,第一个答案不是很完整。是的,sync将被阻止,而async将不会,但是需要考虑其他语义。调用dispatch_sync()还将导致代码等待该队列上的每个挂起项都完成执行,并使其成为所述工作的同步点。dispatch_async()将简单地将工作提交到队列并立即返回,之后它将“在某个点”执行,您需要以其他方式跟踪该工作的完成情况(通常通过将一个dispatch_async嵌套到另一个dispatch_async中-例如,请参见手册页)。

来自手册页:

基本面

从概念上讲,
dispatch\u sync()
是一种方便的
dispatch\u async()
包装器,它添加了一个信号量来等待块的完成,并在块周围添加一个包装器来表示块的完成


有关调度信号量的更多信息,请参见
dispatch\u semaphore\u create(3)
dispatch\u sync()
功能的实际实现可能经过优化,与上述描述不同。

任务可以同步或异步执行

Synchronous函数仅在任务完成后返回当前队列上的控件。它阻塞队列并等待任务完成

异步函数在发送任务以在不同队列上执行后立即返回对当前队列的控制。它不会等到任务完成。它不会阻塞队列


只有在异步模式下,我们才能添加延迟->
asyncAfter(截止日期:10..

啊,是的,这很好,谢谢。是的,我现在正在使用串行队列。我只是不知道现在的好处在哪里。谢谢。谢谢你的回答。现在它更有意义了。它不会阻塞队列,而是阻塞线程:p