我正在阅读NSOperationQueue
博客和文档。
我们可以NSOperationQueue
通过setMaxConcurrentOperationCount
属性设置并发操作数。
我的疑问是,如果我正在使用setMaxConcurrentOperationCount =1
那,那意味着我的队列一次只能执行一个任务。然后并发的含义就变成了单线程执行。
请告诉我,如果我解释的是错误的意思。
是的,它一次只能执行一项任务。在某些情况下,一次设置一个是有意义的。例如,下载照片并对其应用滤镜。从您的角度来看,最好一次下载一个,应用过滤器并存储/显示。正如乔纳森(Jonathan)在评论中添加的那样:
而不是设置maxConcurrentOperationCount = 1。您可以根据其他操作的完成进行操作,而该操作本质上具有相同的效果。例如,A依赖于B,但请确保B不依赖于A。
该setMaxConcurrentOperationCount =1
是对这种东西不错:
[myOperationQueue setMaxConcurrentOperationCount:1];
for (NSOperation *operation in myArrayOfOperations )
{
[myOperationQueue addOperation:operation];
}
因此,您可以在循环上添加新操作,但是它们将在串行队列中运行。尽管如此,从文档:
操作队列根据其排队的操作对象的优先级和准备状态来执行它们。如果所有排队的操作对象都具有相同的优先级,并且准备好在将它们放入队列时执行(即,它们的isReady方法返回YES),则将按照它们提交到队列的顺序执行它们。对于最大并行操作数设置为1的队列,这等效于串行队列。但是,您永远不应依赖操作对象的串行执行。操作准备状态的改变可以改变执行顺序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句