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

时间:2014-04-27 03:43:22

标签: c++ multithreading

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

2 个答案:

答案 0 :(得分:8)

C ++在底层实现之上提供了一个相当薄的包装器,导致没有显着的额外开销。实际上,您甚至可以get a handle到底层的OS线程,它将是__gthread_t,它是g ++的pthread句柄和Visual C++的WINAPI线程句柄。

但是,线程确实有内在开销,因为它们需要由OS调度,包含堆栈等等。

An analysis by Mark Russinovich在Windows下经历了线程创建的限制。这些限制当然是由线程开销引起的,并给出:

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

答案 1 :(得分:3)

这里已经解决了:

How much overhead is there when creating a thread?

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