2011-12-07 10 views
18

मैं 'जावा के साथ ऑपरेशन सिस्टम अवधारणाओं' पढ़ रहा हूं। मैं अवरोध और तुल्यकालिक की अवधारणा से काफी उलझन में हूं, उनके बीच अंतर क्या हैं?तुल्यकालिक, nonblocking और asynchronous के साथ अवरुद्ध करने के बीच क्या अंतर है?

+0

कृपया इस ब्लॉग का संदर्भ लें http://voinici.ceata.org/~sana/blog/?p=248 और http://stackoverflow.com/questions/2625493/asynchronous-vs-non-blocking –

उत्तर

18

संदर्भ के आधार पर अवरुद्ध सिंक्रोनस के समान हो सकता है या नहीं भी हो सकता है। जब हम विधि कॉल के बारे में बात करते हैं, तो एक सिंक्रोनस कॉल को अवरुद्ध करने के लिए भी कहा जा सकता है (मैं इसे थोड़ा सा वापस ले जाऊंगा), क्योंकि विधि को कॉल करने वाला थ्रेड आगे बढ़ने तक विधि आगे नहीं बढ़ सकता है। इस मामले में एंटोनिम असीमित होगा।

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

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

+1

हाय, क्या आप एक उदाहरण दे सकते हैं जिसमें अवरुद्ध कॉल सिंक्रोनस नहीं है? धन्यवाद –

+0

@Always_Beginner: परिभाषा द्वारा अवरुद्ध कॉल हमेशा तुल्यकालिक होगा क्योंकि इसका तात्पर्य है कि कुछ पूर्ण होने की प्रतीक्षा करते समय नियंत्रण प्रवाह ब्लॉक करता है। हालांकि एक सिंक्रोनस कॉल अवरुद्ध नहीं हो सकता है। – Tudor

2

सिंक्रोनस का अर्थ है कि काम थ्रेड में किया जाता है जो फ़ंक्शन को कॉल करता है और विधि समाप्त होने तक वापस नहीं आती है।

असिंक्रोनस विधियां तुरंत लौटती हैं क्योंकि एक और थ्रेड काम करता है और काम पूरा होने पर एक ध्वज उठाता है या आग लगता है।

अवरुद्ध करने का अर्थ है कि एक ब्लॉकिंग घटना निष्पादित करने वाला धागा घटना होने तक प्रतीक्षा करेगा। उदाहरण के लिए आप सॉकेट से पढ़ने की कोशिश करते हैं और कोई आपको संदेश नहीं भेजता है। ब्लॉकिंग कॉल तब तक वापस नहीं आएगा जब तक सॉकेट से संदेश को पुनर्जीवित नहीं किया जाता है।

अच्छी तरह से और नॉनब्लॉकिंग का मतलब है अवरुद्ध करने के विपरीत इसका मतलब है कि गैर-अवरुद्ध कॉल असीमित हैं।

+0

thx क्रोनोस । ऐसा लगता है कि तुल्यकालिक और अवरोधन में कोई अंतर नहीं है, उन्हें दोनों को एक काम या घटना का इंतजार करना पड़ता है, फिर वे अगले काम या घटना को जारी रख सकते हैं। क्या वह सही है? – diligent

2

इस प्रकार मैं उन्हें वर्गीकृत होगा:

अवरोधित करना - थ्रेड कार्रवाई तक की सफलता या विफलता पर इंतजार करेंगे (पर 'इंतजार करेंगे' प्रकाश डाला, विफलता आमतौर पर एक समय समाप्ति है)

तुल्यकालिक - थ्रेड पूरा हो जाएगा कार्रवाई, या तो सफलता या विफलता से, (कार्रवाई पूरा होने पर प्रकाश डाला) इसके बाद किसी भी लाइन तक पहुँचने से पहले

गैर अवरुद्ध - धागा, क्रिया को पूरा करने के लिए इंतजार नहीं होंगे कार्यान्वित कार्रवाई तुरंत

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

0

अवरुद्ध करने के लिए कहा जाता है - ऑपरेशन को अवरुद्ध व्यवहार होने के लिए कहा जाता है यदि यह कुछ घटना पूरी होने की प्रतीक्षा करता है। उदाहरण के लिए: यदि लॉक उपलब्ध नहीं है तो थ्रेड उपलब्ध होने तक एक थ्रेड ईवेंट पर प्रतीक्षा स्थिति दर्ज कर सकता है। इस तरह के एक ऑपरेशन को अवरुद्ध कहा जाता है।

सिंक्रोनस - सिंक्रोनस कॉल को आसानी से http प्रोटोकॉल के उदाहरण के साथ समझा जा सकता है जहां क्लाइंट सर्वर से उत्तर के लिए प्रतीक्षा करता है। सिंक्रोनस कॉल अवरुद्ध या अवरुद्ध हो सकता है।

असीमित - एक विधि एसिंक्रोनस अन्य विधि को कॉल कर सकती है। कॉल के बाद यह अपने अगले निर्देश को निष्पादित करना जारी रख सकता है। जब विधि कहा जाता है तो इसे निष्पादन पूरा करता है, यह इसकी सफलता या विफलता के कॉलर विधि को उत्तर/कॉलबैक भेज देगा।

गैर-अवरोधन - गैर अवरोधन व्यवहार उस उदाहरण पर स्थिति की जांच करना है। उदाहरण के लिए- यदि ताले के मामले में यह उपलब्ध नहीं है तो यह तब तक इंतजार नहीं करेगा जब तक यह अवरोधन ऑपरेशन की तरह उपलब्ध न हो। इसके अलावा हमें बार-बार ताले की उपलब्धता की जांच करने की आवश्यकता है क्योंकि एसिंक्रोनस कॉल जैसी कोई कॉलबैक नहीं होगी।

सारांश: अवरोध हमेशा तुल्यकालिक है।

सिंक्रोनस कॉल में कुछ ईवेंट होने की प्रतीक्षा होने पर अवरोधन संचालन अवरुद्ध हो रहा है, कॉलर विधि प्रतीक्षा स्थिति में प्रवेश कर सकती है।

सिंक्रोनस कॉल गैर अवरुद्ध है, अगर यह बार-बार अगले निर्देश के लिए आगे बढ़ने से पहले कुछ घटनाओं की जांच करता है। कॉलर विधि कुछ घटनाओं को पूरा करने के लिए प्रतीक्षा स्थिति में प्रवेश नहीं करती है।

असिंक्रोनस कॉल अवरुद्ध नहीं हो सकता है और इसमें कॉल करने की विधि से कॉलबैक शामिल है जिसे संभालने की आवश्यकता है।

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