我想使用NSOperationQueue设置一个序列化的任务队列,但是我对文档中讨论的术语有点困惑。
在NSOperation对象的上下文中,并发和非并发两个术语不一定指线程的并行执行。相反,非并发操作是使用为其提供的环境执行的操作,而并发操作则负责设置自己的执行环境。
建立“自己的执行环境”意味着什么?
我的NSOperation派生任务需要按照它们被添加到队列的顺序进行串行执行。
因此,我认为这意味着一个“非并发”操作,因此对于需要完成的工作,我将实现'main‘,并返回'isConcurrent’的‘NO’。此外,NSOperationQueue的“setMaxConcurrentOperationCount”将设置为1。
我之所以没有在这些任务之间设置NSOperation依赖关系,是因为它们插入队列的顺序是它们应该完成的顺序。
这些假设正确吗?
发布于 2009-10-30 00:10:37
NSOperationQueue总是同时执行操作,同时考虑到依赖关系。
“非并发”操作需要一个单独的线程才能同时执行。NSOperationQueue负责提供这个线程。换句话说,非并发操作依赖于NSOperationQueue使其成为并发操作.
“并发”操作本身是并发的;它不需要NSOperationQueue为其创建线程。一个例子是使用异步文件IO的操作。
如果希望连续执行两个或多个操作,则需要使用依赖项。
如果您想要一个操作阻止主线程,那么不要使用NSOperationQueue;只需在主线程上一个接一个地运行每个操作即可。
要手动设置并发操作的最大值,请在operationQueue setMaxConcurrentOperationCount:上使用方法
发布于 2009-10-29 22:08:34
您真的需要子类NSOperation吗?为什么不直接使用NSInvocationOperation及其addDependency:方法呢?
请看我在this SO question上的答案。
https://stackoverflow.com/questions/1646795
复制相似问题