c++11线程引入了什么样的开销

What kind of overhead to c++11 threads introduce?

本文关键字:什么样 开销 线程 c++11      更新时间:2023-10-16

来自C#/Java编程,在程序中创建新线程往往会增加大量开销(例如C#中的每个线程1MB)。我很好奇C++11线程引入了什么样的开销。

C++在底层实现之上提供了一个相当薄的包装器,不会带来显著的额外开销。事实上,您甚至可以获得底层操作系统线程的句柄,它将是__gthread_t,它是g++的pthread句柄,也是Visual C++的WINAPI线程句柄。

然而,线程确实有内在的开销,因为它们需要由操作系统调度,包含堆栈等等。

Mark Russinovich的一项分析深入探讨了在Windows下创建线程的局限性。这些限制当然是由线程开销引起的,并给出:

  • 线程需要大约1 MB的虚拟地址空间(默认链接器设置)
  • 4-16 KB的初始提交大小
  • 12-48 KB的不可分页内存

此处已解决:

创建线程时有多少开销?

Cliff注意:这将取决于系统,最好的方法是在目标系统上进行基准测试。