通常NSOperationQueue
保证在执行高优先级的任务之前不会执行具有低优先级的任务。但是,当大量操作快速添加到队列时,有时操作队列可能会过载,如下所示
此图表跟踪1000次操作的历史记录。红线显示当前正在执行的NSOperationQueueVeryLowPriority
优先级的任务数,绿线显示队列中空闲NSOperationQueueNormalPriority
且 NOT 执行的任务数,最后蓝线显示队列中的操作总数。
现在,NSOperationQueue
的默认最大并发性在这种情况下似乎是64.当所有这64个插槽都被填满时,即使存在具有更高优先级的任务,它们也不会被执行并且具有等待。我的问题是,是否有某种方法可以调整NSOperationQueue
,以便即使在负载下,它也可以为更高优先级的操作保留一些容量?
答案 0 :(得分:1)
NSOperation
& NSOperationQueue
。
我有一个继承自NSURLConnection
的课程(NSOperation
)。我有NSOperationQueue
设置。我正在向该队列添加大约5000-6000个操作。这里的问题是并非所有操作都被执行。它完全停在64.发现并发操作期间的默认最大线程数似乎是64为intel-i5处理器。
解决方案正在使用NSRunLoop
:
声明了NSRunLoop
获取currentLoop。然后运行循环几秒钟。
这样做会每隔几秒退出currentLoop。这样,在任何时间点,最大线程数都小于64.我的应用程序正常工作。 :)