In this blog I found a pretty neat example on how to create a simple thread pool using boost::asio. I basically want to use it like this:
#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 is, as far as I know, mainly made for network IO. However, I mainly want to use it for general purpose functions. Concurrency issues would be adressed using asio::io_service::strand
.
So my question: Is it a good idea to create a thread pool like this, even if my program does not use network IO? Are there any obvious performance losses compared to other thread pool implementations? If so, are there better implementations that are also as neat?
See Question&Answers more detail:os