2

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

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

这不会造成问题,但我想进一步了解它,因此感谢您对积极影响的任何见解,谢谢。

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

4

3 回答 3

7

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

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

于 2013-09-07T19:26:59.500 回答
3

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

于 2013-09-06T20:14:04.567 回答
0

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

于 2013-09-06T19:51:59.613 回答