this blog içinde boost :: asio kullanarak basit bir iş parçacığı havuzu oluşturma konusunda oldukça düzgün bir örnek buldum. Temelde bu gibi kullanmak istiyorum:Yükseltme :: asio iş parçacığı havuzu genel amaçlı görevler için kullan
#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, hali bildiğim kadarıyla, çoğunlukla ağ IO için yapılmış. Ancak, genel olarak genel amaçlı işlevler için kullanmak istiyorum. Eşzamanlılık sorunları, asio::io_service::strand
kullanılarak sorgulanır.
Soru sorum: Programım ağ IO kullanmasa bile, böyle bir iş parçacığı havuzu oluşturmak iyi bir fikir midir? Diğer iş parçacığı havuzu uygulamalarına kıyasla belirgin bir performans kaybı var mı? Eğer öyleyse, aynı zamanda düzgün olarak daha iyi uygulamaları var mı?
boost :: thread support boost :: thread_group, iş parçacığınızı gruplamak için kullanabilirsiniz – StereoMatching