2013-01-10 35 views
9

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 का उपयोग न करे? क्या अन्य थ्रेड पूल कार्यान्वयन की तुलना में कोई स्पष्ट प्रदर्शन नुकसान है? यदि हां, तो बेहतर कार्यान्वयन क्या हैं जो साफ हैं?

+0

बढ़ावा :: थ्रेड समर्थन बढ़ावा :: thread_group, आप इसे अपने धागे को समूहित करने के लिए उपयोग कर सकते हैं – StereoMatching

उत्तर

6

Boost.Asio नेटवर्क प्रोग्रामिंग के लिए पूरी तरह से नहीं है, reference documentation देखें। यह

  • समय आधारित संचालन (deadline_timer)
  • संकेत ऐसे POSIX धाराओं और Windows के रूप में
  • मंच विशिष्ट कार्यों से निपटने के हैंडल

मैं दूसरे के लिए यह प्रयोग किया है जैसी चीजों के लिए व्यापक समर्थन हासिल है कई अनुप्रयोगों में भी उद्देश्य। आवेदन के लिए एक असीमित इंटरफेस प्रदान करते समय एक लंबे समय तक चलने वाले डेटाबेस संचालन को सेवा देने के लिए थ्रेड पूल होने का एक उदाहरण है। Boost.Asio वास्तव में एक बहुत ही शक्तिशाली पुस्तकालय है। एक सामान्य उद्देश्य थ्रेड पूल के लिए इसका उपयोग करते हुए आप बस ठीक काम कर सकते हैं।

3

मुझे इस तरह से काम न करने का कोई कारण नहीं दिखता है। लाभ के रूप में, आप समय सीमा जैसे चीजों का उपयोग कर सकते हैं जो boost :: asio के शीर्ष पर बनाए गए हैं।

2

मैंने बूस्ट एएसओ के साथ थ्रेडपूल क्लास लिखा था। यह काम करता है और यह आसानी से समझने के लिए पर्याप्त & साफ़ है। ThreadPool with boost asio

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^