何时会有人选择使用NSThreads而不是GCD?

7

是否有任何情况下,任何人想要使用原始的NSThreads而不是GCD进行并发操作?我喜欢GCD,但我想知道在Cocoa / Cocoa-Touch中是否最终需要使用NSThreads。

3个回答

5

我使用pthread来进行控制,它具有良好的性能和可移植性。有时您可能选择使用NSThread,因为它提供了额外的NSObject接口。

在一些更低级别的接口中,您需要通过使用API与线程协调(例如实时I/O或渲染)。在这种情况下,您有时可以灵活选择要使用的线程,有时使用NSThread比较方便,因为可以轻松地使用CF或NS运行循环与这些接口配合使用。因此,在这些情况下,您设置在线程上运行的运行循环参数可能比线程本身更受API的关注。但是...大多数开发人员通常不必经常降到这个层次。


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

2

有时候会出现一些特殊情况,需要做一些无法通过GCD完成的奇怪事情。但是任何可以用GCD完成的事情,都应该采用这种方式(GCD和线程并不互斥,如果你确实需要使用线程,那么你无需改变现有的GCD代码)。

然而,我不确定什么情况下会出现这种特殊情况。也许你需要设置一个次要的专用RunLoop(不确定是否可以用GCD完成,但是使用线程肯定可以)。或者可能还有其他我目前想不到的特殊情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接