异步使用线程池?

async uses a threadpool?

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

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

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

Bartosz 在这个问题上一如既往地出色blog post