c++ सी++ थ्रेड पूल




multithreading boost (6)

उत्पादन कोड (बूस्ट जैसे कुछ) में उपयोग करने के लिए सी ++ के लिए थ्रेड पूल का अच्छा ओपन सोर्स कार्यान्वयन क्या है?

कृपया अपना स्वयं का उदाहरण कोड या उदाहरण कोड उपयोग के लिए एक लिंक प्रदान करें।



मैंने here एक छोटा सा उदाहरण लिखा here । मूल रूप से आपको कोड के इस टुकड़े को लागू करने के लिए क्या करना है:

asio::io_service io_service;
boost::thread_group threads;
auto_ptr<asio::io_service::work> work(new asio::io_service::work(io_service)); 

// Spawn enough worker threads
int cores_number = boost::thread::hardware_concurrency();
for (std::size_t i = 0; i < cores_number; ++i){
    threads.create_thread(boost::bind(&asio::io_service::run, &io_service));
}
// Post the tasks to the io_service
for(vector<string>::iterator it=tasks.begin();it!=tasks.end();it++){
   io_service.dispatch(/* YOUR operator()() here */);
}
work.reset();

आप threadpool को देखना चाहेंगे

Boost.Thread का उपयोग करके थ्रेड पूल को लागू करना मुश्किल नहीं है। Boost.Thread । कार्य के आधार पर, आप मानक टेम्पलेट लाइब्रेरी से एक के बजाय कतार के लिए lock-free कंटेनर का उपयोग करना चाह सकते हैं। उदाहरण के लिए, lock free लाइब्रेरी से fifo कंटेनर।

सौभाग्य!


मेरा मानना ​​है कि आप बूस्ट :: एएसओओ में एक io_service के साथ एक थ्रेड पूल का अनुकरण कर सकते हैं। आप io_service पूल में उपलब्ध थ्रेड की संख्या को नियंत्रित कर सकते हैं, और फिर आप io_service पर कार्यों को "पोस्ट" कर सकते हैं, जो पूल में किसी थ्रेड द्वारा निष्पादित किया जाएगा। इस तरह के प्रत्येक कार्य को एक मजेदार होना चाहिए (मुझे विश्वास है)।

मैं अभी यहां एक उदाहरण नहीं डाल सकता, लेकिन io_service पूल पर एएसओ दस्तावेज बताएगा कि यह कैसे किया जा सकता है।


मुझे लगता है कि यह अभी भी बूस्ट में स्वीकार नहीं किया गया है, लेकिन एक अच्छा सितारा बिंदु: threadpool । वेब साइट से उपयोग के कुछ उदाहरण:

#include "threadpool.hpp"

using namespace boost::threadpool;

// Some example tasks
void first_task()
{
  ...
}

void second_task()
{
  ...
}

void third_task()
{
  ...
}

void execute_with_threadpool()
{
  // Create a thread pool.
  pool tp(2);

  // Add some tasks to the pool.
  tp.schedule(&first_task);
  tp.schedule(&second_task);
  tp.schedule(&third_task);

  // Leave this function and wait until all tasks are finished.
}

पूल में तर्क "2" धागे की संख्या इंगित करता है। इस मामले में, tp का विनाश सभी धागे खत्म करने के लिए इंतजार कर रहा है।


ffead-cpp ढांचे का उपयोग करके एक उदाहरण कार्यान्वयन here वर्णित here । यह प्रत्यक्ष, प्राथमिकता-आधारित के साथ-साथ अनुसूचित थ्रेड पूल कार्यान्वयन प्रदान करता है। इसकी जांच - पड़ताल करें...







boost-thread