Grand Central Dispatchasynchronous与同步

我正在阅读有关GCD调度队列的文档,他们说队列是FIFO,所以我正在弄乱这对asynchronous/同步调度有什么影响?

从我的理解asynchronous执行的东西,它获取的东西,而同步执行的东西串行..

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

我的问题是,在这里async的好处吗? 我在理解这两件事情的时候错过了一些东西。

同步意味着函数将BLOCK当前线程,直到它完成,asynchronous意味着它将在后台处理和函数将不会当前线程BLOCK。

如果您想要串行执行块,请检查串行调度队列的创build

不幸的是,第一个答案并不完整。 是的,同步会阻止和asynchronous不会,但是有额外的语义要考虑。 调用dispatch_sync()也会使您的代码等待,直到该队列上的每个待处理项目都已经完成执行,并使其成为所述工作的同步点。 dispatch_async()将简单地提交工作到队列并立即返回,之后它将在“某个时刻”执行,并且需要以其他方式跟踪工作的完成情况(通常通过在另一个dispatch_async中嵌套一个dispatch_async – 参见例如手册页)。

从手册页:

基本面

Conceptually, dispatch_sync() is a convenient wrapper around dispatch_async() with the addition of a semaphore to wait for completion of the block, and a wrapper around the block to signal its completion. See dispatch_semaphore_create(3) for more information about dispatch sem- aphores. The actual implementation of the dispatch_sync() function may be optimized and differ from the above description. 

任务可以同步或asynchronous执行。

只有在任务完成后, 同步函数才会返回当前队列上的控件。 它阻塞队列并等待任务完成。

asynchronous函数在任务被发送到不同的队列之后立即返回当前队列的控制权。 它不会等到任务完成。 它不会阻塞队列。

只有在asynchronous我们可以添加延迟 – > asyncAfter(deadline: 10..