是否有任何理由共享调度队列?

时间:2013-09-06 19:47:50

标签: ios grand-central-dispatch

我正在处理一些我无法联系原始开发人员的代码。

他向一个类传递一个对另一个类的串行调度队列的引用,我没有看到任何目的,不只是创建另一个调度队列(每个类都是一个单例)。

这不是创造问题,但我想进一步理解,所以对正面影响的任何见解都表示赞赏,谢谢。

编辑:我建议在这里阅读所有答案,他们会解释很多。

3 个答案:

答案 0 :(得分:6)

以这种方式共享队列实际上不是一个好主意(不,不是因为它们很昂贵 - 它们不是,完全相反)。理由是除了队列的创建者以外,任何人都不清楚队列的语义是什么。它是连续的吗?同时?高度优先?低优先级?所有这些都是可能的,一旦你开始传递为了特定类的利益而实际创建的内部队列,外部调用者可以在其上安排工作,这会导致相互死锁或以其他项目的意外行为队列,因为调用者A知道期望并发行为,并且调用者B认为它是一个串行队列,没有任何并发​​执行所暗示的“陷阱”。

因此,队列应尽可能隐藏类的实现细节。该类可以根据需要导出用于针对其内部队列调度工作的方法,但这些方法应该是唯一的访问者,因为他们是唯一知道如何最好地访问和安排特定类型队列工作的人!

答案 1 :(得分:3)

如果它是一个串行队列,那么他们可能打算序列化对共享它的所有对象之间共享的某些资源的访问。

答案 2 :(得分:0)

调度队列的创建有点昂贵,并占用系统资源。如果您可以共享一个,则系统运行效率更高。就此而言,如果您的应用程序在后台运行,则使用共享队列可以管理要完成的单个任务池。所以,是的,有充分的理由使用共享调度队列。