我正在阅读NSOperationQueue
博客和文档。setMaxConcurrentOperationCount = 1的优势
我们可以通过setMaxConcurrentOperationCount
属性在NSOperationQueue
中设置并发操作数。
我的疑问是,如果我使用setMaxConcurrentOperationCount =1
那么这意味着我的队列一次只能执行一项任务。那么并发的含义是什么,它变成单线程执行。
请告诉我,如果我解释错误的意思。
我正在阅读NSOperationQueue
博客和文档。setMaxConcurrentOperationCount = 1的优势
我们可以通过setMaxConcurrentOperationCount
属性在NSOperationQueue
中设置并发操作数。
我的疑问是,如果我使用setMaxConcurrentOperationCount =1
那么这意味着我的队列一次只能执行一项任务。那么并发的含义是什么,它变成单线程执行。
请告诉我,如果我解释错误的意思。
是的,它只会在一次执行一个任务。有些情况下,一次只能设置一个是有意义的。例如,下载照片并对其应用滤镜。从您的角度来看,最好一次下载一个,应用过滤器并存储/显示。正如乔纳森添加评论:
而不是设置maxConcurrentOperationCount = 1。您可以使 的操作取决于另一个操作的完成情况,该操作基本上具有相同的效果。例如。 A依赖于B,但要确保乙 不依赖于A.
的setMaxConcurrentOperationCount =1
是这种东西不错:
[myOperationQueue setMaxConcurrentOperationCount:1];
for (NSOperation *operation in myArrayOfOperations)
{
[myOperationQueue addOperation:operation];
}
所以你在一个循环中添加新的操作,但他们将运行在一个串行队列中。不过,从documentation:
的操作队列基于 它们的优先级,并准备执行其排队的操作对象。如果所有排队的操作对象 具有相同的优先级,并且在将它们放入 时已准备好执行,则队列(即它们的isReady方法返回YES)将按它们提交队列的顺序执行 。对于最大并发操作数设置为1的队列 ,此 等同于一个串行队列。但是,您绝对不应该依赖于操作对象的连续执行。 操作准备就绪的更改可能会改变生成的执行顺序。
线程是由系统创建和管理的,它更有效。
将maxConcurrentOperationCount设置为1会有效地将NSOperation队列更改为串行队列,因此您可以避免并发性问题,而只需花费一次执行一个任务。
然而,只要你喜欢,你可以拥有尽可能多的NSOperationQueues。如果你有它们,十几个核心可以同时运行maxConcurrentOperationCount = 1的十几个NSOperationQueues。唯一的限制是每个队列只能运行一个任务。
而不是设置maxConcurrentOperationCount = 1。您可以根据完成另一个基本上具有相同效果的操作进行操作。例如。A取决于B,但要确保B不依赖于A. – Jonathan