我是C ++的新手,我尝试使用std :: async和launch :: async来生成新线程来处理传入的UDP数据包。对于特定端口上的每个新请求,async会生成一个新线程来处理它。
在负载下,我发现udp数据包到达了我,但异步生成线程并开始处理信息需要10秒以上。我想知道是否存在潜在的线程池,这就是原因,异步被阻止并且正在等待。如果是,我该如何增加此线程池的大小?
答案 0 :(得分:1)
根据标准std::async
,由于对线程本地存储的要求,不能使用线程池。但实际上MSVC确实使用了线程池,因为它的实现是在PPL之上构建的,它们只是忽略了对线程本地存储的要求。其他实现将根据语言要求为std::async
的每次调用启动一个新线程。
巴托斯在这个问题上有着出色的blog post。