什么时候有人想要使用NSThreads而不是GCD?

时间:2012-08-10 21:17:31

标签: objective-c cocoa-touch cocoa grand-central-dispatch nsthread

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

3 个答案:

答案 0 :(得分:5)

我使用pthread来控制,良好的性能和可移植性。有时,您可以选择使用NSThread来提供额外的NSObject接口。

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

但......大多数开发者不需要经常降到这些水平。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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