c++11线程引入了什么样的开销
What kind of overhead to c++11 threads introduce?
来自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注意:这将取决于系统,最好的方法是在目标系统上进行基准测试。
相关文章:
- 实现无开销push_back的最佳方法是什么
- 返回的指向C++对象的链接是什么样的
- 这些是什么样的错误?即使我不在 Linux 上工作,我也遇到了 Linux 错误
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- C++标准是否允许<double>在没有开销的情况下实现 std::可选
- 类型擦除的std::function与虚拟函数调用的开销
- 一组值的零开销下标运算符
- C++ 特征库:引用的性能开销<>
- C++对开销较少的容器使用多个过滤器
- 在编译时评估函数开销的通用方法
- 在循环中调用同一虚函数的开销
- 使用静态成员函数而不是普通函数是否有任何开销?
- 自定义运算符重载C++,无开销
- 在 v8 JavaScript 中重复调用C++是否有巨大的开销?
- 将 mmap 内存用于开销非常低的循环缓冲区
- 与纯 V8 相比,NodeJS 是否有任何性能缺陷或显著开销?
- 非 constexpr 变量模板的开销是否为零?
- 右值引用是否具有与右值引用相同的开销?
- 实例成员与静态成员与非类方法的开销
- c++11线程引入了什么样的开销