setMaxConcurrentOperationCount = 1的优点是什么

时间:2013-10-28 13:52:12

标签: ios

我正在阅读NSOperationQueue博客和文档。

我们可以通过NSOperationQueue属性设置setMaxConcurrentOperationCount中的并发操作数。

我的疑问是,如果我正在使用setMaxConcurrentOperationCount =1那么,这意味着我的队列一次只能执行单个任务。那么并发的含义是什么,它就变成了单线程执行。

请告诉我,如果我解释错误的含义。

3 个答案:

答案 0 :(得分:4)

是的,它一次只能执行一项任务。有些情况下,一次设置一个是有意义的。例如,下载照片并对其应用过滤器。从您的角度来看,最好一次下载一个,应用过滤器并存储/显示它。正如乔纳森在评论中所说:

  

而不是设置maxConcurrentOperationCount = 1。你可以做一个   操作依赖于另一个操作的完成   基本上具有相同的效果。例如。 A取决于B,但请确保B.   不依赖于A.

setMaxConcurrentOperationCount =1很适合这种东西:

[myOperationQueue setMaxConcurrentOperationCount:1];
for (NSOperation *operation in myArrayOfOperations )
{
   [myOperationQueue addOperation:operation];
}

因此,您在循环中添加新操作,但它们将在串行队列中运行。不过,来自documentation

  

操作队列基于执行其排队的操作对象   他们的优先事项和准备就绪如果所有排队的操作对象   具有相同的优先级,并准备好在它们被放入时执行   队列 - 也就是说,他们的isReady方法返回YES-它们被执行   按照它们提交到队列的顺序。对于队列   其最大并发操作数设置为1   等同于一个串行队列。但是,你永远不应该依赖   连续执行操作对象。准备就绪的变化   操作可以改变生成的执行顺序。

答案 1 :(得分:0)

意味着队列中的操作是逐个执行的,当一个完成另一个操作可以启动时,所以选择你的队列是一个SERIAL队列

答案 2 :(得分:0)

将maxConcurrentOperationCount设置为1可以有效地将NSOperation队列更改为串行队列,因此可以避免以一次执行一个任务为代价的并发问题。

但是你可以拥有任意数量的NSOperationQueues。并且十几个具有maxConcurrentOperationCount = 1的NSOperationQueues可以同时运行任务,如果有的话可以使用十几个核心。唯一的限制是每个队列中只能运行一个任务。