2013-10-28 35 views
2

我正在阅读NSOperationQueue博客和文档。setMaxConcurrentOperationCount = 1的优势

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

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

请告诉我,如果我解释错误的意思。

+0

而不是设置maxConcurrentOperationCount = 1。您可以根据完成另一个基本上具有相同效果的操作进行操作。例如。A取决于B,但要确保B不依赖于A. – Jonathan

回答

4

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

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

setMaxConcurrentOperationCount =1是这种东西不错:

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

所以你在一个循环中添加新的操作,但他们将运行在一个串行队列中。不过,从documentation

的操作队列基于 它们的优先级,并准备执行其排队的操作对象。如果所有排队的操作对象 具有相同的优先级,并且在将它们放入 时已准备好执行,则队列(即它们的isReady方法返回YES)将按它们提交队列的顺序执行 。对于最大并发操作数设置为1的队列 ,此 等同于一个串行队列。但是,您绝对不应该依赖于操作对象的连续执行。 操作准备就绪的更改可能会改变生成的执行顺序。

+0

好点。我认为增加依赖关系和设置优先级将是一个更好的选择,尽管你可以保持并发性并运行多个相互依赖的操作。比如你提供的例子。 – Jonathan

+0

谢谢guys..It真的帮助我了解设置操作计数的意义:) –

+0

V.J.你需要接受答案。你没有正确使用这个网站。你的问题都没有接受答案。 – braden

0

意味着,在队列的操作逐条执行,当一个人完成一个又一个可以启动,这样艇员选拔1个您的队列是串行队列

+0

很高兴见到你。 :) – Peres

+0

ahahaha,很高兴见到你:) – Manu

-1

线程是由系统创建和管理的,它更有效。

0

将maxConcurrentOperationCount设置为1会有效地将NSOperation队列更改为串行队列,因此您可以避免并发性问题,而只需花费一次执行一个任务。

然而,只要你喜欢,你可以拥有尽可能多的NSOperationQueues。如果你有它们,十几个核心可以同时运行maxConcurrentOperationCount = 1的十几个NSOperationQueues。唯一的限制是每个队列只能运行一个任务。