我是 C++ 新手,我尝试使用带有 launch::async 的 std::async 来生成新线程来处理传入的 UDP 数据包。对于特定端口上的每个新请求,异步都会产生一个新线程来处理它。
在负载下,我发现 udp 数据包正在到达我,但异步生成线程并开始处理信息需要 10 多秒。我想知道是否有一个底层线程池,这就是异步被阻塞并等待的原因。如果是,我怎样才能增加这个线程池的大小?
我是 C++ 新手,我尝试使用带有 launch::async 的 std::async 来生成新线程来处理传入的 UDP 数据包。对于特定端口上的每个新请求,异步都会产生一个新线程来处理它。
在负载下,我发现 udp 数据包正在到达我,但异步生成线程并开始处理信息需要 10 多秒。我想知道是否有一个底层线程池,这就是异步被阻塞并等待的原因。如果是,我怎样才能增加这个线程池的大小?
由于对线程本地存储的要求,根据标准std::async
不能使用线程池。然而在实践中,MSVC 确实使用了线程池,因为它的实现是建立在 PPL 之上的,它们只是忽略了对线程本地存储的要求。其他实现将std::async
根据语言要求为每次调用启动一个新线程。
与以往一样,Bartosz 有一篇关于这个主题的优秀博客文章。