如何在 Windows 10 应用程序中访问C++默认线程池?
How to access the default thread pool in C++ windows 10 application?
根据这个SO问题:"为什么Windows 10在我的程序中启动额外的线程?"和Hans Passant的回答:Windows 10为Windows 10上的每个C++进程启动一个线程池(至少在VS2013+中用C ++编译时)。
根据Microsoft文档"线程池"和"线程池 API (2018-05-30)",我找不到加入默认进程线程池的方法。
我可以加入默认进程线程池以及如何加入吗?还是我必须创建一个新的?
这是我可以看到的每个进程有多个线程池的几个缺点的列表:
- 创建更多本可以避免的线程
- 更多睡眠线
- 为其他线程和管理器本身占用更多内存
- 由于线程池之间可能存在并发性,效率较低的线程管理算法。
如果我必须创建新的线程池而不是为每个进程加入/使用一个全局线程池,它是否消除了每个进程只有一个线程池的优势?为什么我们不能验证是否有已经创建的线程池并直接使用它?为什么不能加入主进程头池?像 C# 中那样只有一个线程池不是更好吗?
旁注:我正在研究一种数学算法,该算法的计算时间足以实现多线程。此外,它是第三方 DLL 库中的一部分。对我来说,能够加入已经创建的线程池似乎比创建一个新线程池更合乎逻辑,并且可能会干扰客户的主进程线程和另一个潜在的线程池。
在我从Raymon Chen那里得到一个很好的答案和很好的信息之后,我发现了我喜欢分享的这篇文章,因为它帮助我更好地理解: 前20个C++多线程错误以及如何避免它们
std::async
使用Windows上的默认线程池,因此您可能希望使用它。
更多细节在这里和这里。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- 是默认情况下分配给char数组常量的值
- 具有默认值的引用获取函数
- 具有默认模板类型的默认构造函数的类型推导
- 当给定默认值时,为什么此模板参数推导失败
- 修改 VS Code 中的默认C++代码段
- 声明默认的模板化函数
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 如何使用非默认构造函数实例化模板化类
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 格式化浮点值:返回默认值
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr