2012-05-11 22 views
11

मैं 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 देखें) ... क्या एकल धागा बहु-कोर सिस्टम पर एक बाधा बन जाएगा? मुझे लगता है कि कोई भी अवरोधन संचालन अन्य सभी अनुरोधों को निष्पादित करने से रोक देगा। यदि यह वास्तव में मामला है, तो थ्रूपुट को अधिकतम करने के लिए मैं कोरआउट-आधारित प्राप्त-डेटा एसिंक घटना, मेरे आंतरिक अवरुद्ध कार्यों (बहु कोर का लाभ उठाने के लिए) के लिए एक थ्रेड पूल सोच रहा हूं, और फिर एक एसिंक & करीबी कनेक्शन तंत्र भेजता है। फिर, स्केलेबिलिटी महत्वपूर्ण है। कोई विचार?

+0

* प्रश्न *: मुझे लगता है कि मैं समझता हूं "स्केल अप"। "स्केल आउट" क्या है? –

+0

कुछ लोगों को सह-रूटीन दृष्टिकोण को पढ़ने/कार्यान्वित करने के लिए सरल लगता है क्योंकि कोड ऊपर से नीचे तक पढ़ता है। वे पार्सिंग स्ट्रीमिंग के लिए एक बेहतर फिट हैं क्योंकि इनपुट में ब्रेक के बाद स्ट्रीम को फिर से शुरू करने के बाद आपको पिक-अप के बारे में चिंता करने की ज़रूरत नहीं है। – avid

+0

@avid - धन्यवाद, मैंने बूस्ट HTTP सर्वर उदाहरण # 4 में देखा है कि उन्होंने अनुरोध पार्सर के साथ ऐसा कैसे किया। यह बहुत अच्छा है, इसमें कोई संदेह नहीं है, लेकिन मैं कोडिंग/कार्यान्वयन की आसानी से प्रदर्शन से अधिक चिंतित हूं। इस पर आपके विचार क्या हैं? – Tom

उत्तर

9

मैंने हाल ही में बहु-कोर मशीनों पर boost.asio की स्केलेबिलिटी को देखा है।

: मुख्य निष्कर्ष अब तक है कि यह भूमि के ऊपर का परिचय है, ताला विवाद और अतिरिक्त संदर्भ स्विच (कम से कम लिनक्स पर), इन विषयों पर मेरी ब्लॉग पोस्ट में से कुछ देखने है

मैं भी जांच करने के लिए है कि मैं स्पष्ट कुछ भी याद नहीं है, को देखने के http://comments.gmane.org/gmane.comp.lib.boost.asio.user/5133

अपने मुख्य चिंता प्रदर्शन और scalability कर रहे हैं तो मैं afra हूँ asio मेलिंग सूची पर एक धागा शुरू कर दिया आईडी, कि कोई स्पष्ट कट जवाब नहीं है - आपको कुछ प्रोटोटाइप करना होगा और प्रदर्शन को देखना होगा।

यदि आपके पास कोई अवरोधन संचालन है तो आप निश्चित रूप से एकाधिक धागे का उपयोग करना चाहते हैं - दूसरी ओर, संदर्भ स्विचिंग और लॉक विवाद कई धागे के साथ प्रदर्शन को कम कर सकता है (कम से कम आपको बहुत सावधान रहना होगा)।

संपादित: सिर्फ clarifly को stackless coroutines सामान: यह अनिवार्य रूप से अतुल्यकालिक एपीआई अनुक्रमिक/अवरुद्ध कॉल की तरह थोड़ा अधिक लग रही बनाने के लिए बस कुछ वाक्यात्मक चीनी है।

+0

अपनी विशेषज्ञता साझा करने के लिए धन्यवाद, मैं अपने ब्लॉग और नमूना कोड में गहराई से खुदाई करूँगा क्योंकि मैं अपना सर्वर बनाता हूं। महान एएसआईओ धागा भी। ऐसा प्रतीत होता है कि मुझे बस कुछ अलग कार्यान्वयन बेंचमार्क करना होगा और वहां से आगे बढ़ना होगा। हे आपके एएसआईओ थ्रेड में किसी ने पूछा कि क्या आपने कोरआउट कार्यों का उपयोग किया है, लेकिन प्रतिक्रिया नहीं मिली। क्या आपने इसे प्रोफाइल करने की योजना बनाई थी? आपके सहयोग के लिए धन्यवाद! – Tom

+0

आपने अपने मानक और विश्लेषण टॉम के साथ कैसे किया? मुझे यह देखने के लिए उत्सुकता है कि आपको कहां जाना है क्योंकि मैं इसके साथ भी खेल रहा हूं। – Homer6

+0

@ होमर 6 - मैंने पुष्टि की कि मैंने बढ़ावा दिया कि # 4 वास्तव में एक कोर तक ही सीमित था। यहां तक ​​कि अगर यह नहीं था, तो मेरे मामले में, यह मेरे स्वयं के पूल बनाने के बजाय, वेब सर्वर के धागे के भीतर चलाने के लिए और अधिक समझ में आया। तो, कम से कम अभी के लिए, मैंने विचार छोड़ दिया है, और आगे नहीं पीछा किया है। क्षमा करें मैं और अधिक मदद नहीं कर सकता! – Tom

0

आप संदर्भ, सीपीयू अनुदेश कैशिंग, शेड्यूलिंग देरी के इलाके के सापेक्ष प्रभाव की भविष्यवाणी की कठिनाई के कारण कुछ क्या वास्तव में क्या होगा होने के लिए प्रभाव का आकलन कर सकते, आदि

आप के लिए अनुमान का अनुमान चाहते हैं , मान लें कि n स्टैक आकार एस प्रत्येक थ्रेड एनएस बाइट्स लेते हैं, हालांकि प्रत्येक थ्रेड वास्तव में उपयोग किए जाने वाले स्टैक स्पेस का उपयोग करते हैं। यदि यह आपको पृष्ठ सीमा पर धक्का देता है, तो यह प्रदर्शन को कम कर सकता है।

+0

धन्यवाद माइक, मुझे लगता है कि मैं सैद्धांतिक से अधिक पूछ रहा हूं "थ्रेड पूल की तुलना में स्टैकलेस कोरआउटिन अधिक प्रदर्शनकारी हैं?" या क्या मैं गलत तरीके से दो अलग-अलग अवधारणाओं को स्वीकार कर रहा हूं? – Tom

+0

@TomC: यदि आप विंडोज का उपयोग कर रहे हैं, तो कम से कम थ्रेड स्विचिंग के साथ विकल्प के लिए जाएं। सावधानीपूर्वक लिखित कोरआउट्स मेरे अनुभव में कम कैश थ्रैशिंग से ग्रस्त होंगे। यदि आप लंबे समय तक अवरुद्ध कर रहे हैं तो थ्रैशिंग कम संकेतक है। – JimR

+0

@JimR: टिप के लिए धन्यवाद। मैं विंडोज और * दोनों को लक्षित करने की योजना बना रहा हूं, इसलिए आपकी सलाह की सराहना की जाती है – Tom