अतुल्यकालिक और गैर-अवरोधक कॉल के बीच अंतर क्या है? अवरुद्ध और तुल्यकालिक कॉल के बीच भी (उदाहरण के लिए कृपया)?
अतुल्यकालिक और गैर-अवरोधक कॉल के बीच अंतर क्या है? अवरुद्ध और तुल्यकालिक कॉल के बीच भी (उदाहरण के लिए कृपया)?
जवाबों:
कई परिस्थितियों में वे एक ही चीज के लिए अलग-अलग नाम हैं, लेकिन कुछ संदर्भों में वे काफी अलग हैं। तो यह निर्भर करता है। शब्दावली पूरे सॉफ्टवेयर उद्योग में पूरी तरह से सुसंगत तरीके से लागू नहीं होती है।
उदाहरण के लिए, क्लासिक सॉकेट्स एपीआई में, एक नॉन-ब्लॉकिंग सॉकेट वह है जो केवल एक विशेष "त्रुटि संदेश" को ब्लॉक करेगा, जबकि एक अवरुद्ध सॉकेट अवरुद्ध हो जाएगा। आप एक अलग समारोह में इस तरह के रूप में उपयोग करने के लिए है select
या poll
जब पुन: प्रयास करने के लिए एक अच्छा समय है पता लगाने के लिए।
लेकिन एसिंक्रोनस सॉकेट (जैसा कि विंडोज सॉकेट्स द्वारा समर्थित है), या .NET में उपयोग किए जाने वाले एसिंक्रोनस IO पैटर्न अधिक सुविधाजनक हैं। आप एक ऑपरेशन शुरू करने के लिए एक विधि कहते हैं, और जब यह हो जाता है तो ढांचा आपको वापस बुलाता है। यहां भी, बुनियादी अंतर हैं। एसिंक्रोनस Win32 सॉकेट "मार्शल" उनके परिणाम एक विशिष्ट GUI धागे पर विंडो संदेश पास करके देता है, जबकि .NET अतुल्यकालिक IO मुक्त-थ्रेडेड है (आपको नहीं पता कि आपके कॉलबैक को किस थ्रेड पर बुलाया जाएगा)।
तो वे हमेशा एक ही बात का मतलब नहीं है। सॉकेट उदाहरण को खराब करने के लिए, हम कह सकते हैं:
सिंक्रोनस / एसिंक्रोनस दो मॉड्यूल के बीच संबंध का वर्णन करने के लिए है।
ब्लॉकिंग / नॉन-ब्लॉकिंग एक मॉड्यूल की स्थिति का वर्णन करना है।
एक उदाहरण:
मॉड्यूल एक्स: "आई"।
मॉड्यूल वाई: "बुकस्टोर"।
X पूछता है Y: क्या आपके पास "c ++ प्राइमर" नाम की कोई किताब है?
1) अवरुद्ध करना: Y उत्तर से पहले X, X उत्तर की प्रतीक्षा में रहता है। अब X (एक मॉड्यूल) ब्लॉक हो रहा है। X और Y दो धागे या दो प्रक्रियाएँ या एक धागा या एक प्रक्रिया हैं? हम नहीं जानते।
2) नॉन-ब्लॉकिंग: वाई जवाब से पहले एक्स, एक्स सिर्फ वहां छोड़ देता है और अन्य काम करता है। X हर दो मिनट में जांच कर सकता है कि क्या Y ने अपना काम पूरा कर लिया है? या X तब तक वापस नहीं आएगा जब तक Y उसे फोन नहीं करता? हम नहीं जानते। हम केवल यह जानते हैं कि Y अपना काम पूरा करने से पहले X अन्य काम कर सकता है। यहां X (एक मॉड्यूल) गैर-अवरुद्ध है। X और Y दो धागे या दो प्रक्रियाएँ या एक प्रक्रिया हैं? हम नहीं जानते। लेकिन हमें यकीन है कि X और Y एक धागा नहीं हो सकते।
3) सिंक्रोनस: वाई जवाब से पहले एक्स, एक्स जवाब के लिए वहां इंतजार करता रहता है। इसका मतलब है कि X तब तक जारी नहीं रह सकता जब तक Y अपना काम पूरा नहीं कर लेता। अब हम कहते हैं: X और Y (दो मॉड्यूल) समकालिक हैं। X और Y दो धागे या दो प्रक्रियाएँ या एक धागा या एक प्रक्रिया हैं? हम नहीं जानते।
4) एसिंक्रोनस: वाई जवाब से पहले एक्स, एक्स छोड़ देता है और एक्स अन्य काम कर सकता है। जब तक वाई उसे फोन नहीं करेगा तब तक एक्स वापस नहीं आएगा। अब हम कहते हैं: X और Y (दो मॉड्यूल) एसिंक्रोनस हैं। X और Y दो धागे या दो प्रक्रियाएं या एक प्रक्रिया हैं? हम नहीं जानते। लेकिन हमें यकीन है कि X और Y एक धागा नहीं हो सकते।
कृपया ऊपर दिए गए दो बोल्ड-वाक्यों पर ध्यान दें। 2 में बोल्ड-वाक्य क्यों होता है) दो मामलों में जबकि 4 में बोल्ड-वाक्य में केवल एक मामला होता है? यह गैर-अवरुद्ध और अतुल्यकालिक के बीच अंतर की एक कुंजी है।
यहाँ गैर-अवरोधक और तुल्यकालिक के बारे में एक विशिष्ट उदाहरण दिया गया है:
// thread X
while (true)
{
msg = recv(Y, NON_BLOCKING_FLAG);
if (msg is not empty)
{
break;
}
sleep(2000); // 2 sec
}
// thread Y
// prepare the book for X
send(X, book);
आप देख सकते हैं कि यह डिज़ाइन नॉन-ब्लॉकिंग है (आप कह सकते हैं कि ज्यादातर समय यह लूप कुछ बकवास करता है लेकिन सीपीयू की आँखों में, एक्स चल रहा है, जिसका अर्थ है कि एक्स नॉन-ब्लॉकिंग है) जबकि एक्स और वाई सिंक्रोनस हैं क्योंकि एक्स कर सकते हैं किसी भी अन्य चीजों को करना जारी रखें (X लूप से बाहर नहीं जा सकते) जब तक कि यह पुस्तक वाई से नहीं मिलती है।
आम तौर पर इस मामले में, एक्स ब्लॉकिंग बहुत बेहतर है क्योंकि गैर-ब्लॉकिंग एक बेवकूफ लूप के लिए बहुत संसाधन खर्च करता है। लेकिन यह उदाहरण आपको इस तथ्य को समझने में मदद करने के लिए अच्छा है: गैर-ब्लॉकिंग का मतलब अतुल्यकालिक नहीं है।
चार शब्द हमें आसानी से भ्रमित करते हैं, हमें जो याद रखना चाहिए वह यह है कि चार शब्द वास्तुकला के डिजाइन के लिए काम करते हैं। एक अच्छी वास्तुकला डिजाइन करने के बारे में सीखना, उन्हें अलग करने का एकमात्र तरीका है।
उदाहरण के लिए, हम इस तरह की वास्तुकला को डिजाइन कर सकते हैं:
// Module X = Module X1 + Module X2
// Module X1
while (true)
{
msg = recv(many_other_modules, NON_BLOCKING_FLAG);
if (msg is not null)
{
if (msg == "done")
{
break;
}
// create a thread to process msg
}
sleep(2000); // 2 sec
}
// Module X2
broadcast("I got the book from Y");
// Module Y
// prepare the book for X
send(X, book);
यहाँ उदाहरण में, हम कह सकते हैं कि
यदि आपको आवश्यकता है, तो आप चार शब्दों के साथ X1 में बनाए गए उन थ्रेड्स का भी वर्णन कर सकते हैं।
अधिक महत्वपूर्ण चीजें हैं: हम अतुल्यकालिक के बजाय सिंक्रोनस का उपयोग कब करते हैं? हम गैर-अवरोधक के बजाय अवरुद्ध का उपयोग कब करते हैं?
Nginx गैर-अवरुद्ध क्यों है? अपाचे क्यों अवरुद्ध है?
एक अच्छा विकल्प बनाने के लिए, आपको अपनी आवश्यकता का विश्लेषण करना चाहिए और विभिन्न आर्किटेक्चर के प्रदर्शन का परीक्षण करना चाहिए। ऐसी कोई वास्तुकला नहीं है जो विभिन्न आवश्यकताओं के लिए उपयुक्त हो।
इस प्रश्न को NIO और NIO.2 के संदर्भ में java 7 में डालते हुए, async IO गैर-अवरोधक की तुलना में एक कदम अधिक उन्नत है। जावा एनआईओ नॉन-ब्लॉकिंग कॉल के साथ, कोई भी कॉल करके सभी चैनल (सॉकेटचैनलाइन, सर्वरसॉफ्टचैनल, फाइलचैनल इत्यादि) सेट करेगा AbstractSelectableChannel.configureBlocking(false)
। उन आईओ के बाद वापसी कहता है, तथापि, आप की संभावना अभी भी इस तरह अगर और जब आदि फिर से पढ़ने / लिखने के लिए, के रूप में चेकों को नियंत्रित करने की आवश्यकता होगी
उदाहरण के लिए,
while (!isDataEnough()) {
socketchannel.read(inputBuffer);
// do something else and then read again
}
जावा 7 में एसिंक्रोनस एपि के साथ, इन नियंत्रणों को और अधिक बहुमुखी तरीकों से बनाया जा सकता है। 2 तरीकों में से एक का उपयोग करना है CompletionHandler
। ध्यान दें कि दोनों read
कॉल गैर-अवरुद्ध हैं।
asyncsocket.read(inputBuffer, 60, TimeUnit.SECONDS /* 60 secs for timeout */,
new CompletionHandler<Integer, Object>() {
public void completed(Integer result, Object attachment) {...}
public void failed(Throwable e, Object attachment) {...}
}
}
FileChannel
चयन करने योग्य नहीं है और इसे गैर-अवरुद्ध करने के लिए कॉन्फ़िगर नहीं किया जा सकता है।
जैसा कि आप शायद विभिन्न (और अक्सर पारस्परिक रूप से अनन्य) की भीड़ से देख सकते हैं, यह इस बात पर निर्भर करता है कि आप किससे पूछते हैं। कुछ अखाड़ों में, शब्द पर्यायवाची हैं। या वे दो समान अवधारणाओं का उल्लेख कर सकते हैं:
या तो मामले में, इस कार्यक्रम को अनुमति देने के लिए कार्यक्रम को अवरुद्ध करने की अनुमति नहीं दी जा रही है ताकि धीमी प्रक्रिया के पूरा होने की प्रतीक्षा की जा सके - इस कार्यक्रम का जवाब देने की उम्मीद कैसे की जाती है, केवल वास्तविक अंतर है। कौन से शब्द से तात्पर्य है जो प्रोग्रामर से प्रोग्रामर, लैंग्वेज से लैंग्वेज या प्लेटफॉर्म से प्लेटफॉर्म में भी बदलता है। या शर्तें पूरी तरह से विभिन्न अवधारणाओं को संदर्भित कर सकती हैं (जैसे कि थ्रेड प्रोग्रामिंग के संबंध में सिंक्रोनस / एसिंक्रोनस का उपयोग)।
क्षमा करें, लेकिन मुझे विश्वास नहीं है कि एक भी सही उत्तर है जो विश्व स्तर पर सत्य है।
जो भी डेटा उपलब्ध है, उसके साथ एक गैर-कॉलिंग कॉल तुरंत वापस आती है: अनुरोधित बाइट्स की पूरी संख्या, कम, या कोई भी नहीं।
एक एसिंक्रोनस कॉल एक हस्तांतरण का अनुरोध करता है जो अपने पूरे (संपूर्ण) में किया जाएगा लेकिन भविष्य के कुछ समय पर पूरा होगा।
गैर-अवरुद्ध: यह फ़ंक्शन स्टैक पर रहते हुए प्रतीक्षा नहीं करेगा।
एसिंक्रोनस: फ़ंक्शन कॉल के बाद भी काम जारी रह सकता है, क्योंकि कॉल स्टैक से निकल गया है
सिंक्रोनस को उसी समय के रूप में परिभाषित किया गया है।
एसिंक्रोनस को एक ही समय में नहीं होने के रूप में परिभाषित किया गया है।
यह वही है जो पहले भ्रम का कारण बनता है। सिंक्रोनस वास्तव में समानांतर के रूप में जाना जाता है। जबकि अतुल्यकालिक अनुक्रमिक है, ऐसा करें, फिर ऐसा करें।
अब पूरी समस्या एक अतुल्यकालिक व्यवहार को मॉडलिंग करने के बारे में है, क्योंकि आपको कुछ ऑपरेशन मिला है जिसे शुरू करने से पहले दूसरे की प्रतिक्रिया की आवश्यकता है। इस प्रकार यह एक समन्वय समस्या है, आप कैसे जानेंगे कि आप अब उस ऑपरेशन को शुरू कर सकते हैं?
सबसे सरल समाधान को अवरुद्ध करने के रूप में जाना जाता है।
अवरोधन तब होता है जब आप बस दूसरी चीज के लिए इंतजार करने का विकल्प चुनते हैं और आपको उस ऑपरेशन पर आगे बढ़ने से पहले प्रतिक्रिया देना होता है जिसकी उसे आवश्यकता थी।
तो अगर आपको टोस्ट पर मक्खन लगाने की आवश्यकता है, और इस तरह आपको पहले टोस्ट को टोस्ट करने की आवश्यकता है। जिस तरह से आप उन्हें समन्वित करेंगे वह यह है कि आप पहले ब्रेड को टोस्ट करेंगे, फिर टोस्टर को अंतहीन रूप से तब तक घूरेंगे जब तक कि यह टोस्ट को पॉप न कर दे, और फिर आप उन पर मक्खन लगाने के लिए आगे बढ़ेंगे।
यह सबसे सरल उपाय है, और बहुत अच्छी तरह से काम करता है। इसका उपयोग न करने का कोई वास्तविक कारण नहीं है, जब तक कि आप ऐसा न करें कि आपके पास अन्य चीजें हैं जो आपको करने की आवश्यकता है जो कि संचालन के साथ समन्वय की आवश्यकता नहीं है। उदाहरण के लिए, कुछ व्यंजन करना। टोस्ट को पॉप करने के लिए लगातार टोस्ट पर घूरने का इंतज़ार क्यों करें, जब आप जानते हैं कि यह थोड़ा समय लगेगा, और इसके खत्म होने पर आप पूरी डिश धो सकते हैं?
यही कारण है कि गैर-अवरोधक और अतुल्यकालिक के रूप में ज्ञात दो अन्य समाधान खेलने में आते हैं।
जब आप ऑपरेशन किए जाने का इंतजार करते हैं तो गैर-अवरुद्ध तब होता है जब आप अन्य असंबंधित चीजें करना चुनते हैं। जैसा कि आप फिट देखते हैं प्रतिक्रिया की उपलब्धता पर वापस जाँच करना।
इसलिए इसके बजाय टोस्टर को पॉप करने के लिए देखें। तुम जाओ और एक पूरी डिश धो लो। और फिर आप टोस्टर को देखते हैं कि क्या टोस्ट पॉप हो गए हैं। यदि वे हवलदार नहीं होते हैं, तो आप प्रत्येक डिश के बीच टोस्टर पर वापस जाँच करते हुए एक और डिश धोते हैं। जब आप देखते हैं कि टोस्ट पॉप हो गए हैं, तो आप बर्तन धोना बंद कर देते हैं, और इसके बजाय आप टोस्ट लेते हैं और उन पर मक्खन लगाने के लिए आगे बढ़ते हैं।
टोस्टों पर लगातार जांच करने के बाद हालांकि यह कष्टप्रद हो सकता है, कल्पना करें कि टोस्टर दूसरे कमरे में है। व्यंजनों के बीच में आप अपना समय बर्बाद करने के लिए उस दूसरे कमरे में जा रहे हैं ताकि टोस्ट पर जांच की जा सके।
यहाँ अतुल्यकालिक आता है।
एसिंक्रोनस तब होता है जब आप अन्य असंबंधित चीजों को करना चुनते हैं जब आप ऑपरेशन किए जाने की प्रतीक्षा करते हैं। हालाँकि, इस पर जाँच करने के बजाय, आप किसी अन्य चीज़ की जाँच का काम सौंपते हैं, आप स्वयं ऑपरेशन या वॉचर हो सकते हैं, और आपके पास वह चीज़ है जो आपको सूचित करती है और संभवतया आपको तब रोकती है जब प्रतिक्रिया उपलब्ध होती है, ताकि आप दूसरे ऑपरेशन के लिए आगे बढ़ सकें इसकी जरूरत है।
इसकी एक अजीब शब्दावली है। पूरी तरह से समझ में नहीं आता है, क्योंकि ये सभी समाधान आश्रित कार्यों के अतुल्यकालिक समन्वय बनाने के तरीके हैं। इसलिए मैं इसे ईवेंटेड कहना पसंद करता हूं।
तो इस एक के लिए, आप अपने टोस्टर को अपग्रेड करने का निर्णय लेते हैं ताकि जब टोस्ट किया जाए तो वह भीग जाए। आप लगातार सुन रहे होते हैं, यहां तक कि जब आप व्यंजन कर रहे होते हैं। बीप सुनने पर, आप अपनी स्मृति में कतारबद्ध हो जाते हैं कि जैसे ही आप अपने वर्तमान पकवान को धो रहे हैं, आप रुक जाएंगे और टोस्ट पर मक्खन डालेंगे। या आप वर्तमान डिश की धुलाई को रोकना चुन सकते हैं, और तुरंत टोस्ट से निपट सकते हैं।
यदि आपको बीप सुनने में परेशानी होती है, तो आप अपने साथी को टोस्टर देखने के लिए, और टोस्ट तैयार होने पर बता सकते हैं। आपका साथी खुद ही उपरोक्त तीन में से किसी भी रणनीति को चुन सकता है ताकि टोस्टर को देखने के अपने कार्य को समन्वित कर सके और आपको बता सके कि वे कब तैयार हैं।
एक अंतिम नोट पर, यह समझना अच्छा है कि गैर-अवरोधक और async (या जिसे मैं ईवेंटेड कॉल करना पसंद करता हूं) आपको प्रतीक्षा करते समय अन्य चीजें करने की अनुमति देता है, आपके पास भी नहीं है। आप एक गैर-अवरुद्ध कॉल की स्थिति की जांच करने पर लगातार लूप चुन सकते हैं, और कुछ नहीं कर सकते। यह अक्सर अवरुद्ध होने से भी बदतर होता है (जैसे कि टोस्टर को देखना, फिर दूर, फिर उस पर वापस अपने काम तक), इसलिए बहुत सारे गैर-अवरुद्ध API आपको इससे अवरुद्ध मोड में संक्रमण करने की अनुमति देते हैं। घटना के लिए, आप केवल तब तक निष्क्रिय रह सकते हैं जब तक आपको सूचित नहीं किया जाता है। उस मामले में नकारात्मक पक्ष यह है कि अधिसूचना को जोड़ना जटिल था और संभावित रूप से शुरू करने के लिए महंगा था। आपको बीप कार्यक्षमता के साथ एक नया टोस्टर खरीदना था, या अपने साथी को आपके लिए देखने के लिए मना लेना चाहिए।
और एक और बात, आपको तीनों प्रदान करने वाले व्यापार को महसूस करने की आवश्यकता है। एक स्पष्ट रूप से दूसरों की तुलना में बेहतर नहीं है। मेरे उदाहरण के बारे में सोचो। यदि आपका टोस्टर इतना तेज है, तो आपके पास डिश धोने का समय नहीं होगा, इसे धोना भी शुरू न करें, यही कारण है कि आपका टोस्टर कितना तेज है। उस मामले में कुछ और शुरू करना केवल समय और प्रयास की बर्बादी है। ब्लॉकिंग करेंगे। इसी तरह, यदि किसी डिश को धोने में 10 गुना अधिक समय लगेगा तो टोस्टिंग। आपको खुद से पूछना होगा कि क्या करना जरूरी है? टोस्ट उस समय तक ठंडा और कठोर हो सकता है, इसके लायक नहीं, अवरुद्ध भी करेगा। या जब आप प्रतीक्षा करें तो आपको तेजी से चीजों को चुनना चाहिए। अधिक स्पष्ट रूप से है, लेकिन मेरा जवाब पहले से ही बहुत लंबा है, मेरी बात यह है कि क्या आपको इसके बारे में सोचने की ज़रूरत है, और प्रत्येक को इसे लागू करने की जटिलताएं अगर यह इसके लायक है, और यदि यह है तो '
संपादित करें:
हालांकि यह पहले से ही लंबा है, मैं यह भी चाहता हूं कि यह पूरा हो जाए, इसलिए मैं दो और बिंदु जोड़ूंगा।
1) आमतौर पर मल्टीप्लेक्स के रूप में जाना जाने वाला एक चौथा मॉडल भी मौजूद है । यह तब होता है जब आप एक कार्य के लिए प्रतीक्षा करते हैं, तो आप एक और शुरू करते हैं, और जब आप दोनों की प्रतीक्षा करते हैं, तो आप एक और शुरू करते हैं, और इसी तरह, जब तक आपको कई कार्य शुरू नहीं हो जाते हैं और तब तक, आप बेकार का इंतजार करते हैं, लेकिन इन सभी पर उन्हें। इसलिए जैसे ही कोई भी किया जाता है, आप इसकी प्रतिक्रिया को संभालने के साथ आगे बढ़ सकते हैं, और फिर दूसरों की प्रतीक्षा करने के लिए वापस जा सकते हैं। इसे मल्टीप्लेक्स के रूप में जाना जाता है, क्योंकि जब आप प्रतीक्षा करते हैं, तो आपको प्रत्येक कार्य को एक के बाद एक जांचने की जरूरत है कि क्या वे किए गए हैं, विज्ञापन विटम, जब तक कि एक न हो। यह सामान्य गैर-ब्लॉकिंग के शीर्ष पर थोड़ा विस्तार है।
हमारे उदाहरण में यह टोस्टर को शुरू करने, फिर डिशवॉशर, फिर माइक्रोवेव आदि, और फिर उनमें से किसी पर इंतजार करने जैसा होगा। यदि आप टोस्टर की जांच करेंगे कि क्या यह किया गया है, यदि नहीं, तो आप डिशवॉशर की जांच करेंगे, यदि नहीं, तो माइक्रोवेव और फिर से।
2) भले ही मेरा मानना है कि यह एक बड़ी गलती है, लेकिन एक समय में एक चीज का मतलब समकालिक होता है। और एक समय में कई चीजों को अतुल्यकालिक। इस प्रकार आप ब्लॉकिंग और नॉन-ब्लॉकिंग को संदर्भित करने के लिए सिंक्रोनस ब्लॉकिंग और नॉन-ब्लॉकिंग का उपयोग करेंगे। और असिंक्रोनस ब्लॉकिंग और नॉन-ब्लॉकिंग का उपयोग मल्टीप्लेक्स और ईवेंट के लिए किया जाता है।
मुझे वास्तव में समझ नहीं आया कि हम वहां कैसे पहुंचे। लेकिन जब यह आईओ और संगणना की बात आती है, तो सिंक्रोनस और एसिंक्रोनस अक्सर संदर्भित करते हैं जो गैर-अतिव्यापी और अतिव्यापी के रूप में जाना जाता है। यही है, अतुल्यकालिक का मतलब है कि IO और संगणना अतिव्यापी हैं, उर्फ, समवर्ती रूप से हो रहा है। जबकि तुल्यकालिक का अर्थ है कि वे नहीं हैं, इस प्रकार क्रमिक रूप से हो रहा है। तुल्यकालिक गैर-अवरोधन के लिए, इसका मतलब है कि आप अन्य IO या संगणना शुरू नहीं करते हैं, आप बस प्रतीक्षा में व्यस्त रहते हैं और अवरुद्ध कॉल का अनुकरण करते हैं। काश लोग इस तरह से समकालिक और अतुल्यकालिक का दुरुपयोग करना बंद कर देते। इसलिए मैं इसे प्रोत्साहित नहीं कर रहा हूं।
कॉल को अवरुद्ध करना : कॉल पूरा होने पर ही नियंत्रण लौटाता है।
नॉन ब्लॉकिंग कॉल: नियंत्रण तुरंत लौटाता है। बाद में ओएस किसी तरह इस प्रक्रिया को सूचित करता है कि कॉल पूरा हो गया है।
सिंक्रोनस प्रोग्राम: एक प्रोग्राम जो ब्लॉकिंग कॉल का उपयोग करता है। कॉल के दौरान फ्रीज न करने के लिए इसमें 2 या अधिक थ्रेड्स होने चाहिए (इसीलिए इसे सिंक्रोनस कहा जाता है - थ्रेड्स सिंक्रोनाइज होते हैं)।
एसिंक्रोनस प्रोग्राम: एक प्रोग्राम जो नॉन ब्लॉकिंग कॉल का उपयोग करता है । इसमें केवल 1 धागा हो सकता है और अभी भी इंटरैक्टिव हो सकता है।
वे केवल वर्तनी में भिन्न हैं। वे क्या उल्लेख करते हैं, इसमें कोई अंतर नहीं है। तकनीकी होने के लिए आप कह सकते हैं कि वे जोर में भिन्न हैं। गैर अवरोधन प्रवाह को नियंत्रित करने के लिए संदर्भित करता है (यह ब्लॉक नहीं करता है।) एसिंक्रोनस उस घटना को संदर्भित करता है जब ईवेंट डेटा को नियंत्रित किया जाता है (सिंक्रोनस नहीं।)।
अवरुद्ध मॉडल को I / O शुरू होने पर ब्लॉक करने के लिए आरंभ करने वाले एप्लिकेशन की आवश्यकता होती है। इसका मतलब यह है कि एक ही समय में प्रसंस्करण और I / O को ओवरलैप करना संभव नहीं है। सिंक्रोनस नॉन-ब्लॉकिंग मॉडल प्रोसेसिंग की ओवरलैपिंग और I / O की अनुमति देता है, लेकिन इसके लिए आवश्यक है कि एप्लिकेशन आवर्ती आधार पर I / O की स्थिति की जांच करे। यह अतुल्यकालिक गैर-अवरोधक I / O को छोड़ देता है, जो प्रसंस्करण की ओवरलैप करने की अनुमति देता है और I / O, जिसमें I / O पूर्ण होने की अधिसूचना शामिल है।