首页 > 解决方案 > Boost 线程、Posix 线程和 STD 线程,为什么它们提供不同的性能?

问题描述

我所知道的,

在计算机科学中,执行线程是可以由调度程序独立管理的最小程序指令序列,调度程序通常是操作系统的一部分。线程和进程的实现在操作系统之间有所不同,但在大多数情况下,线程是进程的一个组件。多个线程可以存在于一个进程中,并发执行并共享内存等资源,而不同的进程不共享这些资源。特别是,进程的线程在任何给定时间共享其可执行代码及其变量的值。 [ 1 ]

当我决定用 C++ 编写一个多线程程序时,我面临着许多选择,比如 boost 线程、posix 线程和 std 线程。

在 Internet 上进行的简单搜索显示了boost.org网站在此处进行的性能测量。

我的问题也更基本和性能相关。

基本上,为什么它们的性能不同?为什么,例如线程类型 A,比其他线程快?它们由大多数专业程序员编写,由强大的操作系统运行,但它们提供不同的性能。

是什么让它们更快或更慢?

标签: c++multithreadingboostposix

解决方案


Boost 文档引用了 Fiber 库,它实际上不是线程。创建库称为纤程的东西(本质上是用户空间线程或协程,有时也称为绿色线程)不会在内核端创建单独的可调度实体,因此在创建时效率会更高。其他事情可能效率较低,因为在此模型下 I/O 操作必然会变得更多(因为如果其他光纤可以在那里工作,则执行 I/O 的光纤不应该阻塞它运行的操作系统线程)。

请注意,那里的一些协同程序实现远远超出了事实上的 GNU/Linux ABI 和其他类似 POSIX 的操作系统的概念限制,因此它们充其量应该被视为丑陋的黑客。


推荐阅读