NSOperationQueue有储备容量吗?

时间:2012-01-26 07:12:50

标签: objective-c cocoa concurrency nsoperationqueue

通常NSOperationQueue保证在执行高优先级的任务之前不会执行具有低优先级的任务。但是,当大量操作快速添加到队列时,有时操作队列可能会过载,如下所示

enter image description here

此图表跟踪1000次操作的历史记录。红线显示当前正在执行的NSOperationQueueVeryLowPriority优先级的任务数,绿线显示队列中空闲NSOperationQueueNormalPriority NOT 执行的任务数,最后蓝线显示队列中的操作总数。

现在,NSOperationQueue的默认最大并发性在这种情况下似乎是64.当所有这64个插槽都被填满时,即使存在具有更高优先级的任务,它们也不会被执行并且具有等待。我的问题是,是否有某种方法可以调整NSOperationQueue,以便即使在负载下,它也可以为更高优先级的操作保留一些容量?

1 个答案:

答案 0 :(得分:1)

NSOperation& NSOperationQueue

我有一个继承自NSURLConnection的课程(NSOperation)。我有NSOperationQueue设置。我正在向该队列添加大约5000-6000个操作。这里的问题是并非所有操作都被执行。它完全停在64.发现并发操作期间的默认最大线程数似乎是64为intel-i5处理器。

解决方案正在使用NSRunLoop: 声明了NSRunLoop获取currentLoop。然后运行循环几秒钟。 这样做会每隔几秒退出currentLoop。这样,在任何时间点,最大线程数都小于64.我的应用程序正常工作。 :)

相关问题