如何在 Windows 10 应用程序中访问C++默认线程池?

How to access the default thread pool in C++ windows 10 application?

本文关键字:默认 C++ 线程 访问 Windows 应用程序      更新时间:2023-10-16

根据这个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上的默认线程池,因此您可能希望使用它。

更多细节在这里和这里。