在this blog我發現了一個非常簡潔的例子,就是如何使用boost :: asio創建一個簡單的線程池。基本上,我想用這樣的:使用boost :: asio線程池進行通用任務
#include <thread>
#include <functional>
#include <boost/asio.hpp>
int main (int argc, char* argv[]) {
asio::io_service io_service;
asio::io_service::work work(io_service);
std::vector<std::thread> threadPool;
for(size_t t = 0; t < std::thread::hardware_concurrency(); t++){
threadPool.push_back(thread(std::bind(&asio::io_service::run, &io_service)));
}
io_service.post(std::bind(an_expensive_calculation, 42));
io_service.post(std::bind(a_long_running_task, 123));
//Do some things with the main thread
io_service.stop();
for(std::thread& t : threadPool) {
t.join();
}
}
的boost :: ASIO是,據我所知,主要是針對網絡IO。不過,我主要是想將它用於通用功能。併發問題將使用asio::io_service::strand
來解決。
所以我的問題:創建一個像這樣的線程池是一個好主意,即使我的程序不使用網絡IO?與其他線程池實現相比,是否有任何明顯的性能損失?如果是這樣,是否有更好的實現,也是一樣整潔?
的boost ::線程支持的boost :: thread_group,你可以用它來組你的線程 – StereoMatching