异步使用线程池

async uses a threadpool?

本文关键字:线程 异步      更新时间:2023-10-16

我是C++新手,我尝试使用 std::async 和 launch::async 来生成新线程来处理传入的 UDP 数据包。对于特定端口上的每个新请求,异步都会生成一个新线程来处理它。

在负载下,我发现 udp 数据包正在到达我,但异步生成线程并开始处理信息需要 10 秒以上。我想知道是否有底层线程池,这就是原因,异步被阻止并正在等待。如果是,如何增加此线程池的大小?

根据标准std::async由于对线程本地存储的要求,无法使用线程池。但是,在实践中,MSVC 确实使用线程池,因为它的实现是在 PPL 之上构建的,它们只是忽略了线程本地存储的要求。其他实现将根据语言需要为每次调用std::async启动一个新线程。

与以往一样,Bartosz在这个主题上有一篇出色的博客文章。