2011-01-31 5 views
5

मैं boost :: asio (अनजान स्थानांतरण योजनाओं) का उपयोग करके सरल प्रोटोकॉल का एक सेट कार्यान्वित कर रहा हूं। जब वे दौड़ते हैं तो ये सीपीयू बाध्य होते हैं। दक्षता में सुधार करने के लिए, मैं दोनों मेजबानों को जितना संभव हो सके काम करने की कोशिश करना चाहता हूं। यदि मेजबान ए के पास दो कार्यों को पूर्ववत करने के बीच विकल्प है, जिसमें से एक मेजबान बी को गणना शुरू करने देगी, और जो कोई नहीं करेगा, मैं मेजबान ए को पूर्व चुनना चाहता हूं।मैं अन्य हैंडलर चलाने पर समाप्त async_write कॉल को प्राथमिकता देने के लिए boost :: asio को कैसे बल दूं?

वर्तमान में, io_service async_writes से पहले कम्प्यूटेशनल गहन हैंडलर चला रहा है। जब तक टीसीपी विंडो पूरी नहीं होती है (या कुछ समान स्थिति सॉकर को डेटा लिखना अवरुद्ध कर रही है), तो कुछ अन्य हैंडलर चलाने के बजाए async_write को समाप्त करना लगभग निश्चित रूप से बेहतर होता है।

मैंने हैंडलरों के लिए प्राथमिकता कतार के एएसओ का उदाहरण देखा है। ऐसी प्राथमिकता कतार का उपयोग करने के लिए async_write को पुन: कार्यान्वित करना मेरी समस्या का एकमात्र समाधान है?

उत्तर

3

प्रलेखन में an example है जो वर्णन करने वाले हैंडलर को प्राथमिकता को कैसे संलग्न करते हैं। आपको async_write को फिर से लागू करने की आवश्यकता नहीं होगी, उदाहरण के लिए handler_priority_queue कक्षा का अपना संस्करण लागू करें।

+0

मैंने उस उदाहरण को देखा। मैं समझ नहीं पा रहा हूं कि async_write को प्राथमिकता कैसे संलग्न करें। चूंकि लेखन अतुल्यकालिक है, मेरा मानना ​​है कि पूरा करने वाले हैंडलर को async_write में आंतरिक कहा जा रहा है। यदि ऐसा है, तो मुझे अपनी प्राथमिकता को बढ़ावा देने की आवश्यकता है। – Amy

+0

@ एमी क्या आप चिंतित हैं कि 'async_write' एक रचनात्मक ऑपरेशन है? –

+0

मुझे चिंतित है कि async_write एक पूर्णता हैंडलर नहीं है (मुझे लगता है कि इसका मतलब कुछ है जो हैंडलर लागू करता है और io_service :: पोस्ट पर भेज दिया जाता है।) मैं इस तथ्य से भी चिंतित हूं कि async_write एक रचनात्मक ऑपरेशन है। – Amy