调度队列和操作队列的区别

19

我在GCD和线程方面非常新手。我已经阅读了教程,但是感到非常困惑。 有人能用简单的话解释一下吗?请不要建议苹果开发者链接。

提前致谢!


在这种情况下,我可以建议SO链接 :) .. 希望你觉得它们有用... https://dev59.com/C2w05IYBdhLWcg3wsz_N https://dev59.com/LGkv5IYBdhLWcg3wwTdm https://dev59.com/xGgt5IYBdhLWcg3w-SL1 还有两个外部链接:- http://maniacdev.com/2010/03/easier-threading-with-nsoperation-for-better-performance http://blog.spec-india.com/difference-between-nsthread-and-nsoperation - IronManGill
3个回答

18

NSOperationQueue(操作队列)适用于需要长时间运行、可能需要取消或具有复杂依赖关系的操作。GCD(Grand Central Dispatch,调度中心)分派队列则更适合执行短期任务,且需要最小化性能和内存开销。

可以取消已在NSOperationQueue(操作队列)中排队的操作(只要操作本身支持取消)。将块(block)排队在GCD(Grand Central Dispatch,调度中心)分派队列中时,它一定会在某个时间点被执行。

查看下面的链接,它可能对你有所帮助。

Operation Queue vs Dispatch Queue for iOS Application


我看到了你在这个链接中关于后台进程的回答。我需要长时间运行一个录音应用程序,请指点正确的方向。 - Youngwing

4
操作能够为我们提供更多的控制,例如我们可以随时取消一个特定的操作或同时取消所有操作。但是在调度队列中无法做到这一点。

调度队列基于先进先出(FIFO)的概念工作,而操作则不是。

对于操作,我们可以通过定义它们的优先级来优先执行特定的任务,从而对它们进行控制,例如哪个任务首先执行,哪个任务最后执行。

通过将名为“queuePriority”的属性设置为非常低、低、正常、高、非常高等级别,可以实现这一点,许多其他类似的操作也可以使用操作完成,而不能使用调度队列

使用操作无法按顺序执行任务,因为它们默认是并发的,但是通过使操作之间相互依赖,例如操作2依赖于操作1,而操作3依赖于操作2,因此它们将按顺序执行。


1
"

GCDNSOperationQueue 更低级,其主要优势在于其实现非常轻量级且专注于无锁算法和性能。

一般来说,您应该使用最适合您需求的最高抽象级别。这意味着您通常应该使用 NSOperationQueue 而不是 GCDNSOperationQueue 可以让您更好地控制操作的执行方式。

"

谢谢回复。我听说GCD更方便使用,而另一个则有一定的开销(根据一些教程...)。 - Youngwing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接