7

是否有任何人想要使用原始 NSThreads 而不是 GCD 进行并发?我喜欢 GCD,但我想知道最终是否需要将 NSThreads 用于 Cocoa/Cocoa-Touch。

4

3 回答 3

5

我使用pthreads 来表示控制、良好的性能和便携性。有时,您可能会选择使用它提供NSThread的额外NSObject接口。

有一些较低级别的接口,您需要将线程与您使用的 API 进行协调(例如实时 I/O 或渲染)。有时您对使用的线程具有灵活性,有时NSThread在这种情况下使用起来很方便,因此您可以轻松地通过这些接口使用 CF 或 NS 运行循环。因此,您在线程上设置的运行循环参数可能比线程本身对 API 更感兴趣。在这些情况下,GCD 不一定是替代方案。

但是……大多数开发人员不需要经常降到这些级别。

于 2012-08-10T21:32:07.613 回答
3

您应该几乎不需要直接在 OS X 或 iOS 上使用 NSThread/pthread API。在其他平台上,可能是的(尽管 GCD 正越来越广泛地移植到 *BSD、Linux 甚至 Windows - 请参阅 Grand Central Dispatch 的 Wikipedia 页面),但在 Apple OS 平台上,您几乎总是会通过允许获得更好的结果系统为你做线程生命周期管理。您可能想自己进行线程管理的唯一情况是在高度实时的场景中,您需要管理线程优先级并通过平衡每个线程手动执行的工作量来直接控制线程延迟。

于 2012-08-11T23:24:06.443 回答
2

在某些特殊情况下,您必须做一些 GCD 无法完成的奇怪事情。但是你可以用 GCD 做的任何事情你都应该这样做(GCD 和线程不是相互排斥的,如果你需要实际使用一个线程,你不需要改变你已经拥有的任何 GCD 东西)。

但是不确定会是什么情况。也许如果您需要设置一个辅助专用 RunLoop(不确定是否可以使用 GCD 完成,但肯定可以使用线程)。或者可能还有其他一些我目前无法计算的特殊情况。

于 2012-08-10T21:27:07.323 回答