मैं HTTP अनुरोधों के प्री-पोस्ट-प्रोसेसिंग के लिए एक टीसीपी-आधारित डिमन बना रहा हूं। ग्राहक अपाचे HTTPD (या IIS) से कनेक्ट होंगे, और एक कस्टम अपाचे/आईआईएस मॉड्यूल आगे की प्रक्रिया के लिए मेरे टीसीपी डिमन के अनुरोधों को अग्रेषित करेगा। मेरे डेमन को महत्वपूर्ण ट्रैफिक को संभालने के लिए (लेकिन बाहर नहीं) को स्केल करने की आवश्यकता होगी, और अधिकतर अनुरोध छोटे और अल्पकालिक होंगे। डिमन सी ++ में बनाया जाएगा, और क्रॉस-प्लेटफार्म होना चाहिए।टीसीपी सर्वर डब्ल्यू/बूस्ट :: एएसओ, थ्रेड पूल बनाम स्केलेलेस कोरआउट्स की स्केलेबिलिटी
मैं वर्तमान में बूस्ट एएसओ पुस्तकालयों को देख रहा हूं, जो एक प्राकृतिक फिट की तरह लगते हैं। हालांकि, मुझे स्टैकलेस कोरआउट्स बनाम थ्रेड पूल पैटर्न की योग्यता को समझने में परेशानी हो रही है। विशेष रूप से, मैं HTTP सर्वर उदाहरण # 3 और HTTP सर्वर उदाहरण # 4 देख रहा हूं: http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/examples.html
मेरे सभी गुगल होने के बावजूद, मैं स्टैकलेस कोरआउट सर्वर की योग्यता को पूरी तरह से समझने में असमर्थ हूं, और यह कैसे होगा बहु-कोर सिस्टम पर थ्रेड पूल सर्वर से संबंधित प्रदर्शन करें।
इनमें से कौन सा सबसे उपयुक्त है मेरी आवश्यकताओं को देखते हुए, और क्यों? कृपया, बेकार कोरआउट विचार के बारे में अपने उत्तरों को 'गूंगा' करने के लिए स्वतंत्र महसूस करें, मैं अभी भी कमजोर जमीन पर हूं। धन्यवाद!
संपादित: चर्चा के लिए एक और यादृच्छिक सोचा/चिंता का विषय: बूस्ट HTTP सर्वर उदाहरण # 4 के रूप में वर्णन किया गया है "एक एकल पिरोया HTTP stackless coroutines का उपयोग कर कार्यान्वित सर्वर"। ठीक है, तो यह पूरी तरह से एकल-थ्रेडेड है (दाएं? माता-पिता की प्रक्रिया के बाद भी बच्चे के लिए 'फोर्क'? उदाहरण में #.c सर्वर.cpp देखें) ... क्या एकल धागा बहु-कोर सिस्टम पर एक बाधा बन जाएगा? मुझे लगता है कि कोई भी अवरोधन संचालन अन्य सभी अनुरोधों को निष्पादित करने से रोक देगा। यदि यह वास्तव में मामला है, तो थ्रूपुट को अधिकतम करने के लिए मैं कोरआउट-आधारित प्राप्त-डेटा एसिंक घटना, मेरे आंतरिक अवरुद्ध कार्यों (बहु कोर का लाभ उठाने के लिए) के लिए एक थ्रेड पूल सोच रहा हूं, और फिर एक एसिंक & करीबी कनेक्शन तंत्र भेजता है। फिर, स्केलेबिलिटी महत्वपूर्ण है। कोई विचार?
* प्रश्न *: मुझे लगता है कि मैं समझता हूं "स्केल अप"। "स्केल आउट" क्या है? –
कुछ लोगों को सह-रूटीन दृष्टिकोण को पढ़ने/कार्यान्वित करने के लिए सरल लगता है क्योंकि कोड ऊपर से नीचे तक पढ़ता है। वे पार्सिंग स्ट्रीमिंग के लिए एक बेहतर फिट हैं क्योंकि इनपुट में ब्रेक के बाद स्ट्रीम को फिर से शुरू करने के बाद आपको पिक-अप के बारे में चिंता करने की ज़रूरत नहीं है। – avid
@avid - धन्यवाद, मैंने बूस्ट HTTP सर्वर उदाहरण # 4 में देखा है कि उन्होंने अनुरोध पार्सर के साथ ऐसा कैसे किया। यह बहुत अच्छा है, इसमें कोई संदेह नहीं है, लेकिन मैं कोडिंग/कार्यान्वयन की आसानी से प्रदर्शन से अधिक चिंतित हूं। इस पर आपके विचार क्या हैं? – Tom