gpt4 book ai didi

objective-c - 使用带有无限 while 循环的 Grand Central Dispatch?

转载 作者:行者123 更新时间:2023-12-04 03:12:21 30 4
gpt4 key购买 nike

我有 5 个函数需要在单独的线程上运行。 Grand Central Dispatch 应该比线程更高效,所以我决定使用它。每个函数都有一个无限的 while 循环 - while(true) - 在整个程序期间运行。所以在程序存在之前函数不会返回。问题是,GCD 不会同时运行队列——它一次运行一个队列。当第一个队列完成时,它开始第二个队列。如果我将每个函数放在一个队列中,只有一个会运行,因为 Grand Central Dispatch 将等待第一个函数返回以运行下一个函数,但该函数永远不会返回(因为它是一个无限循环)。有什么办法可以将 GCD 与无限循环功能一起使用吗?还是我应该只使用线程?

Mac OSX Snowleopard 10.6.8 上的 Xcode 3.2.6。

最佳答案

男孩,到目前为止有很多困惑/冲突的答案!

首先,您没有理由在这里使用线程。没有任何。使用 GCD,即使是“长时间运行”的操作,也完全没问题。如果您从上述操作中所做的只是读取数据,然后对数据执行某些操作,那么您当然应该使用 dispatch sources 或 dispatch_io 因为这就是它们的用途,它们可以大大简化您的代码,也只在必要时创建线程,但是如果您真的执着于拥有多个长时间运行的并行操作的概念,那么只需将这些操作中的每一个包装到一个 block 中,然后将这些 block 分派(dispatch)到一个全局并发队列中。它们将并行运行。如果您拥有的更多是“多个工作流”,其中每个工作流代表一个不同的操作链,这些操作需要串行但与其他工作流并行,然后为每个工作流创建一个串行队列和独立的串行队列队列将彼此同时运行。就这么简单! GCD 经常让那些期望事情变得更复杂,或者来自经典线程背景并试图将一个概念映射到另一个概念的人感到困惑。不要那样做,你会过得轻松得多。 :)

关于objective-c - 使用带有无限 while 循环的 Grand Central Dispatch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245606/

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