2012-02-08 107 views
18

我读的调度队列中的文档的GCD,并在其中他们说,队列是FIFO,所以我woundering什么影响这对异步/同步调度?大中央调度异步VS同步

从我的理解异步的,因为它得到的东西,而同步执行的东西串行顺序执行的东西..

但是当你写你的GCD的代码,你决定在哪些事情发生的顺序..所以只要你的知道什么在你的代码,你应该知道哪些东西的执行顺序回事..

我的问题是,哪来的异步这里的好处?我在理解这两件事情时错过了一些东西。

回答

12

同步意味着函数将阻止当前线程,直到它已经完成,异步意味着它将在后台被处理和功能将不会阻止当前线程。

如果你想块串行执行检查串行调度队列

+0

啊是啊,是清除它的很酷的感谢。是的,我正在使用串行队列..我只是不确定现在我的好处在哪里。谢谢。 – 2012-02-08 20:18:26

24

创建的第一个答案是不够全面,很遗憾。是的,同步会阻止,异步不会,但是还有其他语义要考虑。调用dispatch_sync()也会导致您的代码等待,直到该队列上的每个待处理项都已完成执行,并使其成为该工作的同步点。 dispatch_async()将只需提交工作到队列并立即返回后,它会被执行“在某个时候”,你需要平时通过嵌套另一个dispatch_async内一个dispatch_async来跟踪工作,在一些其他的方式(完成 - 见例如手册页)。

+0

感谢您的回答。它现在变得更有意义了。 – 2012-02-09 22:23:47

6

从手册页:

基本面

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. 
1

任务可以同步或异步执行。

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

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

仅异步我们可以添加延迟 - >asyncAfter(deadline: 10..