在 Cocoa 中,NSThread 比 pthread 快吗?是否有任何性能提升?可以忽略不计吗?
4 回答
我没有数据可以支持这一点,但我会冒险说“它们是等价的”。 NSThread
几乎可以肯定是 pthread 的包装器(真的有任何其他方法可以创建系统线程吗?),因此使用NSThread
与 pthread 相比的任何开销都与创建新对象然后销毁它相关联。一旦线程本身启动,它在性能方面应该几乎相同。
我认为这里真正的问题是:“你为什么需要知道?” 你有没有遇到过 spawning NSThread
s 似乎对你的表现有害的情况?(如果您产生数百个线程,我可以看到这是一个问题,但在这种情况下,数百个线程很可能是您的问题,而不是NSThread
对象)
除非您有证据证明NSThread
对象的创建是您的应用程序的瓶颈,否则我肯定会选择“忽略不计”选项。
pthreads 实际上的开销略少,但我无法想象它在实践中会有什么不同。NSThread 在下面使用 pthreads。两者的线程中代码的实际执行速度将是相同的。
在 iPhone SDK 下,NSThread 使用 pthread 作为实际线程。坦率地说,它们是等价的。
但是,如果我们使用 pthread API,我们可以通过 pthread API 访问“深度”设置。例如,调度方式、堆栈大小、分离与否等。这些 API 被 NSThread 胶囊隐藏。
因此,在某些情况下,pthreads 获胜。
我还猜想,您为 NSThread 额外支付的任何“开销”或“实例化差异”都会被您最终需要执行的额外周期和调用所平衡,以使用 pthread API 正确配置您的 pthread。
我相信 NSThread 只不过是方便的包装器,它在想要多线程的 Cocoa/Cocoa-touch 应用程序中节省了一些编码。