c++ - Boost 线程、Posix 线程和 STD 线程,为什么它们提供不同的性能?
问题描述
我所知道的,
在计算机科学中,执行线程是可以由调度程序独立管理的最小程序指令序列,调度程序通常是操作系统的一部分。线程和进程的实现在操作系统之间有所不同,但在大多数情况下,线程是进程的一个组件。多个线程可以存在于一个进程中,并发执行并共享内存等资源,而不同的进程不共享这些资源。特别是,进程的线程在任何给定时间共享其可执行代码及其变量的值。 [ 1 ]
当我决定用 C++ 编写一个多线程程序时,我面临着许多选择,比如 boost 线程、posix 线程和 std 线程。
在 Internet 上进行的简单搜索显示了boost.org网站在此处进行的性能测量。
我的问题也更基本和性能相关。
基本上,为什么它们的性能不同?为什么,例如线程类型 A,比其他线程快?它们由大多数专业程序员编写,由强大的操作系统运行,但它们提供不同的性能。
是什么让它们更快或更慢?
解决方案
Boost 文档引用了 Fiber 库,它实际上不是线程。创建库称为纤程的东西(本质上是用户空间线程或协程,有时也称为绿色线程)不会在内核端创建单独的可调度实体,因此在创建时效率会更高。其他事情可能效率较低,因为在此模型下 I/O 操作必然会变得更多(因为如果其他光纤可以在那里工作,则执行 I/O 的光纤不应该阻塞它运行的操作系统线程)。
请注意,那里的一些协同程序实现远远超出了事实上的 GNU/Linux ABI 和其他类似 POSIX 的操作系统的概念限制,因此它们充其量应该被视为丑陋的黑客。