NSOperationQueue和并发与非
我想使用NSOperationQueue设置一个序列化的任务队列,但我对文档中讨论的术语有些困惑。
在NSOperation对象的上下文中,并发和非并发不一定是指线程的并行执行。 相反,非并发操作是使用为其提供的环境执行的操作,而并发操作负责设置其自己的执行环境。
设置“自己的执行环境”是什么意思?
我的NSOperation派生任务需要按照它们添加到队列中的顺序连续执行。
所以我认为这意味着一个'非并发'的操作,所以我会为需要完成的工作实现'main',并返回'isConcurrent'的NO。 另外,NSOperationQueue的'setMaxConcurrentOperationCount'将被设置为1。
我不在这些任务之间设置NSOperation依赖关系的原因是因为它们被插入到队列中的顺序是它们应该完成的顺序。
这些假设是否正确?
NSOperationQueue
总是同时执行操作,同时考虑相关性。
“非并发”操作需要单独的线程才能并发执行。 NSOperationQueue
负责提供此线程。 换句话说,非并发操作取决于NSOperationQueue
使其成为并发操作。
“并发”操作本身是并发的; 它不需要NSOperationQueue
为它创建一个线程。 一个例子是使用异步文件IO的操作。
如果你想要连续执行两个或多个操作,你需要使用依赖关系。
如果你想要一个操作来阻塞主线程,那么不要使用NSOperationQueue
; 只需在主线程上依次运行每个操作。
要手动设置最大并发操作,请使用operationQueue setMaxConcurrentOperationCount:
方法setMaxConcurrentOperationCount:
你真的需要NSOperation
吗? 为什么不使用NSInvocationOperation
及其addDependency:
方法?
在这个SO问题中看到我的答案。
链接地址: http://www.djcxy.com/p/65113.html