2

在 Cocoa 中,NSThread 比 pthread 快吗?是否有任何性能提升?可以忽略不计吗?

4

4 回答 4

10

我没有数据可以支持这一点,但我会冒险说“它们是等价的”。 NSThread几乎可以肯定是 pthread 的包装器(真的有任何其他方法可以创建系统线程吗?),因此使用NSThread与 pthread 相比的任何开销都与创建新对象然后销毁它相关联。一旦线程本身启动,它在性能方面应该几乎相同。

我认为这里真正的问题是:“你为什么需要知道?” 你有没有遇到过 spawning NSThreads 似乎对你的表现有害的情况?(如果您产生数百个线程,我可以看到这是一个问题,但在这种情况下,数百个线程很可能是您的问题,而不是NSThread对象)

除非您有证据证明NSThread对象的创建是您的应用程序的瓶颈,否则我肯定会选择“忽略不计”选项。

于 2010-01-14T20:43:52.550 回答
1

pthreads 实际上的开销略少,但我无法想象它在实践中会有什么不同。NSThread 在下面使用 pthreads。两者的线程中代码的实际执行速度将是相同的。

于 2010-01-14T20:43:17.293 回答
0

在 iPhone SDK 下,NSThread 使用 pthread 作为实际线程。坦率地说,它们是等价的。

但是,如果我们使用 pthread API,我们可以通过 pthread API 访问“深度”设置。例如,调度方式、堆栈大小、分离与否等。这些 API 被 NSThread 胶囊隐藏。

因此,在某些情况下,pthreads 获胜。

于 2010-01-15T03:46:16.253 回答
0

我还猜想,您为 NSThread 额外支付的任何“开销”或“实例化差异”都会被您最终需要执行的额外周期和调用所平衡,以使用 pthread API 正确配置您的 pthread。

我相信 NSThread 只不过是方便的包装器,它在想要多线程的 Cocoa/Cocoa-touch 应用程序中节省了一些编码。

于 2013-02-05T20:55:52.250 回答