首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSOperationQueue与并发与非并发

NSOperationQueue与并发与非并发
EN

Stack Overflow用户
提问于 2009-10-29 21:50:47
回答 2查看 13.1K关注 0票数 19

我想使用NSOperationQueue设置一个序列化的任务队列,但是我对文档中讨论的术语有点困惑。

在NSOperation对象的上下文中,并发和非并发两个术语不一定指线程的并行执行。相反,非并发操作是使用为其提供的环境执行的操作,而并发操作则负责设置自己的执行环境。

建立“自己的执行环境”意味着什么?

我的NSOperation派生任务需要按照它们被添加到队列的顺序进行串行执行。

因此,我认为这意味着一个“非并发”操作,因此对于需要完成的工作,我将实现'main‘,并返回'isConcurrent’的‘NO’。此外,NSOperationQueue的“setMaxConcurrentOperationCount”将设置为1。

我之所以没有在这些任务之间设置NSOperation依赖关系,是因为它们插入队列的顺序是它们应该完成的顺序。

这些假设正确吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-30 00:10:37

NSOperationQueue总是同时执行操作,同时考虑到依赖关系。

“非并发”操作需要一个单独的线程才能同时执行。NSOperationQueue负责提供这个线程。换句话说,非并发操作依赖于NSOperationQueue使其成为并发操作.

“并发”操作本身是并发的;它不需要NSOperationQueue为其创建线程。一个例子是使用异步文件IO的操作。

如果希望连续执行两个或多个操作,则需要使用依赖项。

如果您想要一个操作阻止主线程,那么不要使用NSOperationQueue;只需在主线程上一个接一个地运行每个操作即可。

要手动设置并发操作的最大值,请在operationQueue setMaxConcurrentOperationCount:上使用方法

票数 28
EN

Stack Overflow用户

发布于 2009-10-29 22:08:34

您真的需要子类NSOperation吗?为什么不直接使用NSInvocationOperation及其addDependency:方法呢?

请看我在this SO question上的答案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1646795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档