自从C++11以来,C++中的并行/并发编程工具数量激增:线程、异步函数、并行算法、协程...但是关于一种流行的并行编程模式线程池呢?
就我所知,标准库中没有直接实现此功能。可以使用
我认为可以很容易地使
是否考虑过类似于此的解决方案,如果是,为什么被拒绝了?或者是否有我错过的标准解决方案?
就我所知,标准库中没有直接实现此功能。可以使用
std::thread
执行线程池,但这需要手动完成。可以通过std::async
异步函数在新线程(std::launch::async
)或调用线程(std::launch::deferred
)中启动。我认为可以很容易地使
std::async
支持线程池:通过另一个启动策略(std::launch::thread_pool
),在隐式创建的全局线程池中执行任务;或者有一个std::thread_pool
对象加上对std::async
的重载函数,它接受一个线程池。是否考虑过类似于此的解决方案,如果是,为什么被拒绝了?或者是否有我错过的标准解决方案?
std::thread
,而只有C++20引入了std::jthread
。我认为在引入std::jthread
之前需要积累使用新线程设施的经验,而这仍然是低级别的。我预计更高级别的抽象甚至更难标准化。 - 463035818_is_not_a_numberstd::future
需要一个新线程。事实上,MSVC不得不修补他们的std::async
,以便出于这个原因不使用线程池。具体来说,http://eel.is/c++draft/futures#state-10和相关部分会引起严重的头痛。 - Mgetz