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..
- 快速浏览Grand Central Dispatch和Swift 3
- 关于调用dispatch_queue_t和dispatch_sync
- iOS上的runloop中的操作顺序
- 在CTCallCenter callEventHandler中取消隐藏视图非常缓慢
- 图像下载后更新单元格高度
- 我怎样才能定期使用GCD在后台运行代码块?
- 我为什么要selectGCD而不是NSOperation,并为高级应用程序块?
- GCD,NSThread或NSOperationQueue中哪一个最好?
- 如何从iOS的Grand Central Dispatch Queueasynchronous绘制到GLKit的OpenGL ES上下文