this blog में मुझे बूस्ट :: एएसओ का उपयोग करके एक साधारण थ्रेड पूल बनाने के तरीके पर एक सुंदर साफ उदाहरण मिला। मैं मूल रूप से इस तरह उपयोग करना चाहते हैं:सामान्य प्रयोजन कार्यों के लिए बूस्ट :: एएसओ थ्रेड पूल का उपयोग
#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();
}
}
बूस्ट :: asio है, जहाँ तक मुझे पता है, मुख्य रूप से नेटवर्क आईओ के लिए बनाया है। हालांकि, मैं मुख्य रूप से इसे सामान्य उद्देश्य कार्यों के लिए उपयोग करना चाहता हूं। asio::io_service::strand
का उपयोग करके Concurrency मुद्दों को संबोधित किया जाएगा।
तो मेरा प्रश्न: क्या यह एक अच्छा धागा पूल बनाना अच्छा विचार है, भले ही मेरा प्रोग्राम नेटवर्क IO का उपयोग न करे? क्या अन्य थ्रेड पूल कार्यान्वयन की तुलना में कोई स्पष्ट प्रदर्शन नुकसान है? यदि हां, तो बेहतर कार्यान्वयन क्या हैं जो साफ हैं?
बढ़ावा :: थ्रेड समर्थन बढ़ावा :: thread_group, आप इसे अपने धागे को समूहित करने के लिए उपयोग कर सकते हैं – StereoMatching