【问题标题】:Boost thread, Posix thread and STD thread, why do they offer different performances?Boost 线程、Posix 线程和 STD 线程,为什么它们提供不同的性能?
【发布时间】:2018-04-29 07:38:36
【问题描述】:

据我所知,

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

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

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

我的问题更基本,也与性能有关。

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

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

【问题讨论】:

标签: c++ multithreading boost posix


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2017-10-25
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多