gpt4 book ai didi

iphone - NSOperationQueue 和并发与非并发

转载 作者:太空狗 更新时间:2023-10-30 03:16:34 25 4
gpt4 key购买 nike

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

In the context of an NSOperation object, the terms concurrent and non-concurrent do not necessarily refer to the side-by-side execution of threads. Instead, a non-concurrent operation is one that executes using the environment that is provided for it while a concurrent operation is responsible for setting up its own execution environment.

设置“自己的执行环境”是什么意思?

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

所以我认为这意味着“非并发”操作,所以我会为需要完成的工作实现“主要”,并为“isConcurrent”返回 NO。此外,NSOperationQueue 的“setMaxConcurrentOperationCount”将设置为 1。

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

这些假设是否正确?

最佳答案

NSOperationQueue 始终并发执行操作,同时考虑依赖性。

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

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

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

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

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

关于iphone - NSOperationQueue 和并发与非并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1646795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com