मैं मूल थ्रेड पूल के रूप में boost::asio::io_service
का उपयोग कर रहा हूं। कुछ थ्रेड io_service में जोड़े जाते हैं, मुख्य धागा हैंडलर पोस्ट करना शुरू करता है, कार्यकर्ता धागे हैंडलर चलाना शुरू करते हैं, और सब कुछ खत्म हो जाता है। अब तक सब ठीक है; मुझे सिंगल थ्रेडेड कोड पर एक अच्छा स्पीडअप मिलता है।बूस्ट एशिया के साथ पोस्ट कतार आकार पर सीमा निर्धारित करना?
हालांकि, मुख्य धागे में लाखों चीजें पोस्ट करने के लिए हैं। और यह सिर्फ उन्हें पोस्ट करना जारी रखता है, कार्यकर्ता थ्रेड से उन्हें बहुत तेज़ कर सकते हैं। मैं राम सीमाओं को हिट नहीं करता हूं, लेकिन अभी भी इतनी मूर्खतापूर्ण है कि इतनी सारी चीजें हैं। मैं क्या करना चाहता हूं, हैंडलर कतार के लिए एक निश्चित आकार है, और कतार पूर्ण होने पर पोस्ट() ब्लॉक है।
मुझे बूस्ट एएसआईओ दस्तावेज़ों में इसके लिए कोई विकल्प नहीं दिख रहा है। क्या यह संभव है?
समस्या यह नहीं है कि 'io_service' कार्य पूरा करने से पहले बंद हो जाता है --- हम' io_service 'को गर्वपूर्वक बंद करने के लिए' कार्य 'ऑब्जेक्ट को हटाने के बारे में जानते हैं। समस्या यह है कि 'io_service' बहुत सारे कार्यों को जमा करने देता है। हम असाइन किए गए कार्यों की संख्या को ऐसे तरीके से सीमित करना चाहते हैं जिसमें कार्यों को बनाने वाले थ्रेड के हिस्से पर मतदान शामिल न हो, इसलिए हमारे प्रश्न के बारे में हमारा सवाल है कि 'मतदान() 'को ब्लॉक करने के लिए बनाया जा सकता है या नहीं। – uckelman