2010-11-10 21 views
9

का उपयोग क्यों नहीं करना चाहिए, अब मैं कुछ घटना कोड (गीवेन्ट का उपयोग करके अजगर में) लिख रहा हूं और मैं nginx को वेब सर्वर के रूप में उपयोग करता हूं और मुझे लगता है कि दोनों महान हैं। मुझे बताया गया कि घटनाओं के साथ एक व्यापार बंद है लेकिन इसे देखने में असमर्थ था। क्या कोई कृपया कुछ प्रकाश डाल सकता है?मुझे एसिंक (घटनाक्रम) IO

जेम्स

+0

क्यों * आपको नहीं चाहिए? (आपने या तो इसके लिए कोई तर्क नहीं दिया है।) –

+0

मैं जानना चाहता हूं कि व्यापार बंद क्या है ... – James

+0

कैश कोहेन्सी? कोड जटिलता? थ्रेड हैंडलिंग? –

उत्तर

1

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

उस ने कहा, यदि उपर्युक्त परिदृश्य असंभव है (यानी, सभी ग्राहक एक ही संसाधन का अनुरोध करेंगे), तो ईवेंट-संचालित जाने का तरीका है।

+7

आपने जो उल्लेख नहीं किया है वह यह है कि आप एक गैर-अवरुद्ध तरीके से आवश्यक संसाधन तक पहुंच सकते हैं। इस तरह आप ब्लॉक नहीं करते हैं, ग्राहकों का जवाब दे सकते हैं, और संसाधन तैयार होने पर आपके ईवेंट सिस्टम से कॉलबैक प्राप्त होगा, सब एक ही थ्रेड में। – nosklo

+1

दूसरा - घटना-आधारित कोड का विचार सब कुछ के लिए एसिंक्रोनस इंटरफेस का उपयोग करना है: कोई तुल्यकालिक I/O नहीं। यद्यपि अजगर, मुड़ता हुआ आदि के साथ भी अजगर के साथ, यदि आप सावधान नहीं हैं तो गलती से कुछ अवरुद्ध कॉल का उपयोग करना काफी आसान है। बीटीडब्ल्यू, थ्रेड बनाम घटनाओं के बारे में बात करते समय यह पृष्ठ उद्धृत करता है: http://www.kegel.com/c10k.html – cce

+2

@cce: यदि c10k पर्याप्त नहीं है तो हम c500k को आजमा सकते हैं: http: //blog.urbanairship .com/ब्लॉग/2010/09/29/लिनक्स कर्नेल ट्यूनिंग के लिए c500k / – jfs

9

घटनाक्रम प्रोग्रामिंग की एकमात्र कठिनाई यह है कि आपको कभी भी ब्लॉक नहीं करना चाहिए। यह हासिल करना मुश्किल हो सकता है यदि आप कुछ पुस्तकालयों का उपयोग करते हैं जो थ्रेड के साथ दिमाग में डिजाइन किए गए थे। यदि आप इन पुस्तकालयों को नियंत्रित नहीं करते हैं, तो एक कांटा() + संदेश आईपीसी जाने का रास्ता है।

संबंधित मुद्दे