अतुल्यकालिक बनाम तुल्यकालिक का अर्थ [बंद]


46

कंप्यूटर विज्ञान में एसिंक्रोनस और सिंक्रोनस शब्द का अर्थ क्या है ?

यदि आप Google को उन शब्दों का अर्थ बताते हैं जो आपको निम्नलिखित मिलेंगे:

लेकिन ऐसा लगता है कि वे प्रोग्रामिंग या कंप्यूटर विज्ञान में विपरीत अर्थ बताने के लिए उपयोग किए जाते हैं:

HTML async विशेषता का अर्थ है कि जैसे ही HTML अभी भी पार्स या डाउनलोड हो रहा है, वैसे ही स्क्रिप्ट को निष्पादित किया जाएगा, भले ही यह प्रक्रिया, स्क्रिप्ट और HTML दोनों का अर्थ है, मेरे पास एक ही समय में मौजूद और मौजूद हो।

क्या इन शब्दों का उपयोग कंप्यूटर विज्ञान में विपरीत अर्थ बताने के लिए किया जाता है या क्या मुझे यह बात याद आ रही है?


47
मुझे यह बताना आसान लगता है: अगर मुझे समझ में नहीं आता है कि कोड कैसे काम करता है और अगर कीड़े अचानक गायब हो जाते हैं तो मैं उन्हें खोज रहा हूं, कोड शायद अतुल्यकालिक है। :)
एरिक डुमिनील

4
दुखद सच यह है कि प्रोग्रामिंग के क्षेत्र में, समय के साथ इन शब्दों का उल्टा मतलब निकल गया है, जो कि अन्यथा उनका मतलब है। उनके वर्तमान अर्थों के ऐतिहासिक कारण हो सकते हैं लेकिन कोई अच्छा औचित्य नहीं है।
सोलोमनऑफ का सीक्रेट

3
एक ही समय में क्या है , कुंजी :)
मोनिका

5
वास्तविक संचालन नहीं करता है (जरूरी) एक ही समय में पाए जाते हैं के रूप में कार्य संचालन बनाम शुरू हो जाती है है एक ही समय समारोह शुरू हो जाती है पर होते हैं ... मेरे लिए पिछड़े प्रतीत नहीं होता? यदि मैं किसी फ़ंक्शन को अतुल्यकालिक के रूप में वर्णित करता हूं तो मैं कह रहा हूं कि जो कुछ भी करता है वह उसी समय होने की गारंटी नहीं है जैसा कि आप इसे कॉल कर रहे हैं।
Affe

2
"अनुक्रमिक" और "गैर-अनुक्रमिक" शब्दार्थ के लिए बेहतर विकल्प हो सकते हैं, लेकिन उस जहाज का रास्ता, रास्ता पहले से ही है।
जेरेड स्मिथ

जवाबों:


47

मैं आपको एक उत्तर देना चाहूंगा जो सीधे उन परिभाषाओं से संबंधित है जिन्हें आपने पाया है। जब एक कार्य T1 दूसरा कार्य T2 शुरू करता है, तो यह निम्नलिखित तरीके से हो सकता है:

समकालिक: मौजूदा या एक ही समय में होने वाली।

इसलिए T2 को T1 के टाइम स्लाइस के अंदर शुरू करने और निष्पादित करने की गारंटी है । T1 T2 की समाप्ति के लिए "प्रतीक्षा करता है" और बाद में प्रसंस्करण जारी रख सकता है। इस अर्थ में, T1 और T2 "एक ही समय में" होते हैं ("समानांतर में" नहीं, लेकिन एक समसामयिक समय अंतराल में)।

अतुल्यकालिक: एक ही समय में मौजूद या उत्पन्न नहीं।

इसलिए T2 का निष्पादन समय अब ​​T1 से असंबंधित है। इसे समानांतर में निष्पादित किया जा सकता है, यह एक सेकंड, एक मिनट या कई घंटे बाद हो सकता है, और टी 2 तब भी चल सकता है जब टी 1 समाप्त हो गया है (इसलिए टी 2 के परिणामस्वरूप एक नया कार्य टी 3 की आवश्यकता हो सकती है)। इस अर्थ में, T1 और T2 "एक ही समय में अंतराल (अंतराल)" नहीं हैं।

बेशक, मैं मानता हूं, जब आजकल अतुल्यकालिक संचालन अक्सर समानांतर निष्पादन बनाने के लिए उपयोग किए जाते हैं, तो शाब्दिक परिभाषा अस्पष्ट दिखाई देती है।


4
यह बहुत बुरा है क्योंकि इसमें बहुत सारे बदलाव हैं, क्योंकि मुझे लगता है कि यह गलत है। सिंक्रोनस तरीके एक के बाद एक सही निष्पादित करते हैं, क्योंकि दूसरी विधि को पहले (अवरुद्ध) विधि के पूरा होने तक इंतजार करना चाहिए। उन दो विधियों को निश्चित रूप से एक ही समय में निष्पादित नहीं किया जा रहा है।
रॉबर्ट हार्वे

6
नहीं, मुझे नहीं लगता कि मैंने किया। समानार्थी और एक साथ समरूपता समान चीजें नहीं हैं।
रॉबर्ट हार्वे

1
मैं यह दावा करने को तैयार हूं कि सॉफ्टवेयर डेवलपर्स के लिए डिक्शनरी परिभाषाएं बहुत काम की नहीं हैं। हमारे द्वारा उपयोग की जाने वाली तकनीकी परिभाषाओं के शब्दकोश परिभाषाओं को मैप करने की कोशिश करना संभवतः उपयोगी नहीं है।
रॉबर्ट हार्वे

1
किसी भी स्थिति में, आपका संपादन चीजों को बेहतर बनाता है, लेकिन "मौजूदा या एक ही समय में होने वाले" शब्द आपके विवरणों को भ्रमित करते हैं। तुल्यकालिक तरीके "एक ही समय में निष्पादित नहीं करते हैं;" वे एक क्रम में निष्पादित करते हैं , जो कि उन्हें तुल्यकालिक बनाता है।
रॉबर्ट हार्वे

1
@RobertHarvey यदि आप सही दृष्टिकोण का उपयोग करते हैं तो शब्दकोश परिभाषा पूरी तरह से ठीक है। आप सभी निष्पादन के समय के प्रति जुनूनी हैं। निर्देशों का एक जीवनकाल होता है जब उन्हें निष्पादित किया जाता है। अनुक्रमिक निर्देश एक रिवाल्वर की चाल में समान रूप से समान रूप से गोलियां चलती हैं। इसी तरह निर्देश निर्देश पाइपलाइन के माध्यम से तुल्यकालिक रूप से आगे बढ़ सकते हैं। निष्पादन के दृष्टिकोण पर ध्यान देना बंद करें। बहुत सी बकवास करने से पहले उन्हें निष्पादित करने के निर्देश होते हैं।
कैंडिड_ओरेंज

20

मुझे लगता है कि इसे समझने का सबसे अच्छा तरीका निम्नलिखित है:

  • सिंक्रोनस: हम जानते हैं कि यह कब होगा (यह तब होता है जब यह दूसरा कोड समाप्त होता है)।
  • अतुल्यकालिक: हम नहीं जानते कि यह कब होगा।

नोट: जब हम किसी दिए गए घड़ी के समय को निष्पादित करने के लिए कोड को शेड्यूल कर सकते हैं, तो व्यवहार में हम नहीं जानते कि यह कब होगा, क्योंकि इसमें देरी हो सकती है - यहां तक ​​कि सिस्टम घड़ी के साथ खिलवाड़ को अनदेखा करना - क्योंकि सिस्टम कुछ और करने में व्यस्त है। इसके अलावा, भले ही हमारे पास गारंटी हो कि यह निश्चित रूप से घड़ी के समय पर होगा, हमें यकीन नहीं है कि हमारे कार्यक्रम का निष्पादन उस समय कहां होगा। तो, नहीं, घड़ी समय के लिए निर्धारित कोड समकालिक नहीं है।


कृपया ध्यान दें कि सॉफ़्टवेयर डेवलपमेंट में हम कहेंगे, उदाहरण के लिए, कि एक कार्य एसिंक्रोनस है, जो अलगाव में कार्य के बारे में कुछ है। हालाँकि, यदि आप इसे उसी समय होने के संदर्भ में परिभाषित करना चाहते हैं या नहीं तो कार्य की तुलना करने के लिए कम से कम कुछ और होना आवश्यक है।

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

यह भी ध्यान देने योग्य है कि हम अवधारणा कर सकते हैं, और आमतौर पर हम सार करते हैं, एक अतुल्यकालिक कार्य के रूप में बाहरी इनपुट प्राप्त करते हैं। उदाहरण के लिए: उपयोगकर्ता इनपुट से पाठ प्राप्त करना। हमें नहीं पता कि उपयोगकर्ता कब टाइप करेगा। यह स्थायी भंडारण से पढ़ने, नेटवर्क पर डेटा प्राप्त करने या किसी अन्य बाहरी प्रणाली पर भी लागू होता है।


वैसे, कुछ चीजें मौलिक रूप से अतुल्यकालिक होने के बावजूद, हम आमतौर पर दिखावा कर सकते हैं कि वे नहीं हैं। हम ऐसा करते हैं कि सॉफ्टवेयर द्वारा मौजूदा निष्पादन को अवरुद्ध कर दिया जाता है - और कुछ और नहीं - जब तक यह पूरा नहीं हो जाता। यही है, हम कुछ अतुल्यकालिक ले सकते हैं और इसे एक तुल्यकालिक एपीआई में लपेट सकते हैं।

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

यह ध्यान देने योग्य है कि अतुल्यकालिक समवर्ती नहीं है। कुछ मामलों में, वर्तमान कार्य पूरा होने के बाद मंच केवल अतुल्यकालिक कार्य निष्पादित कर सकता है। यह अनुक्रमिक होगा (हालांकि अतुल्यकालिक कार्य के निष्पादन का आदेश जरूरी नहीं है), समवर्ती नहीं होगा (निष्पादन अवधि में कोई ओवरलैप नहीं है), फिर भी अतुल्यकालिक होगा।

ओह, वैसे, कुछ प्लेटफार्मों में सिस्टम अतुल्यकालिक कार्य को इनलाइन करने का निर्णय ले सकता है, और इस प्रकार इसे एक तुल्यकालिक ऑपरेशन के रूप में निष्पादित करता है (यह मानते हुए कि यह प्रत्येक कार्य के लिए व्यवहार्य नहीं है)।

फिर, अतुल्यकालिक का मतलब है कि आप नहीं जानते कि यह कब होगा।


आपको "समवर्ती" और "समानांतर" निष्पादन के बीच अंतर में भी रुचि हो सकती है ?


ठीक ठीक। ओपी द्वारा पाया गया विवरण सिंक्रोन्नेस की तुलना में समानता के बारे में बहुत अधिक लगता है (यदि यह एक शब्द है ...)। asynch बनाम synch तब होता है जब कार्रवाई शुरू होती है (अभी जब मैं इसे कॉल करता हूं, या बाद में जब शेड्यूलर निर्णय लेता है) जबकि समानांतर का अर्थ है "हां वे उसी समय हो रहे हैं" बनाम अनुक्रमिक।
जियाकोमो अल्जेटा

1
@GiacomoAlzetta मुझे लगता है कि शब्द सिंक्रिज़्म है। मुझे ये समान शब्द भी मिलते हैं: तुल्यकालन, तुल्यकालन और तुल्यकालन। शायद अपने ही सवाल के लायक है।
थरोट

12

अतुल्यकालिक: एक ही समय में मौजूद या उत्पन्न नहीं।

समकालिक: मौजूदा या एक ही समय में होने वाली।

Async विशेषता का अर्थ है कि जैसे ही HTML अभी भी पार्स कर रहा है, वैसे ही स्क्रिप्ट को निष्पादित किया जाएगा जैसे ही इसे डाउनलोड किया जाता है, जिसका अर्थ है कि दोनों प्रक्रियाएं एक ही समय में मेरे पास मौजूद हैं।

यह वास्तव में भ्रामक है!

बजाय अर्थ पर विचार करें सिंक्रनाइज़ और अनसिंक्रनाइज़्ड । दो बातें कर रहे हैं सिंक्रनाइज़ करता है, तो एक के समय अन्य पर निर्भर करता है, और unsynchronized यदि उनके समय संबंधित नहीं हैं।

आपके उदाहरण अतुल्यकालिक वर्कफ़्लो में, हमारे पास दो चीजें हो रही हैं: स्क्रिप्ट निष्पादन और HTML पार्सिंग। ये दो चीजें अनसिंक्रनाइज़ हैं ; निष्पादन ऑपरेशन का समय और पार्सिंग ऑपरेशन का समय एक दूसरे पर निर्भर नहीं करता है। यदि हम वर्कफ़्लो को सिंक्रोनाइज़ करते हैं , तो ऑपरेशन्स सिंक्रोनाइज़ हो जाएंगे । कहते हैं, निष्पादन तब तक शुरू नहीं होता है जब तक कि पार्सिंग निश्चित रूप से समाप्त नहीं हुई है।

लेकिन यह महसूस करना महत्वपूर्ण है कि यहां वास्तव में तीन संभावनाएं हैं:

  • निष्पादन और पार्सिंग वास्तव में असंबद्ध हैं; वे किसी भी समय और किसी भी क्रम में हो सकते हैं, जो भी सबसे कुशल है।
  • निष्पादन और पार्सिंग सिंक्रनाइज़ हैं; कहते हैं, CPU I / O के पूरा होने की प्रतीक्षा करते समय कुछ नहीं करता है ।
  • निष्पादन और पार्सिंग सिंक्रनाइज़ हैं, लेकिन जब हम I / O के पूरा होने की प्रतीक्षा कर रहे हैं, तो CPU को अन्य काम करने की अनुमति है, और फिर वापस आकर डाउनलोड पूरा होने के बाद पार्सिंग करें

एक बार जब आप समझ लेते हैं कि, लोकप्रिय प्रोग्रामिंग भाषाओं में async वर्कफ़्लो का उद्देश्य अधिक स्पष्ट हो जाता है:

  • अतुल्यकालिक वर्कफ़्लोज़ हमें उच्च-विलंबता संचालन को कुशलतापूर्वक लागू करने में मदद करते हैं क्योंकि हम समय में असंबंधित चीजों को ऑर्डर करने के लिए विवश नहीं हैं। यदि पार्सिंग उच्च-विलंबता और आई / ओ बाध्य है, और स्क्रिप्ट निष्पादन उच्च-विलंबता और सीपीयू बाध्य है, तो हम उन कार्यों को पूरी तरह से या आंशिक रूप से अनसंकट करके एक जीत प्राप्त कर सकते हैं।

  • awaitसी # जैसी भाषाओं में ऑपरेटर अतुल्यकालिक workflows पर आदेश देने के ऑपरेशन है। एक प्रतीक्षा एक अतुल्यकालिक प्रतीक्षा है ; यह एक बिंदु है जहां हम एक अतुल्यकालिक कार्यप्रवाह के दो हिस्सों के बीच एक आदेश संबंध व्यक्त करते हैं, और कहते हैं कि वहाँ वह यह है कि है इंतजार से पहले कोड और इंतजार के बाद कोड के बीच संबंधों को एक "से पहले होता है"। यह है कि हम तीसरे विकल्प को कैसे लागू करते हैं

यदि यह सब बहुत सारगर्भित है, तो कुछ वास्तविक दुनिया के उदाहरणों के बारे में सोचें। जब आप एक पत्र भेजते हैं - एक उच्च-विलंबता I / O बाध्य ऑपरेशन - आप अभी भी सीपीयू-गहन कार्य कर सकते हैं - गणित होमवर्क, कह सकते हैं - जबकि आप अपने पत्र का जवाब पाने के लिए इंतजार कर रहे हैं। आपका गणित होमवर्क करने और आपके मेल को पढ़ने के कार्यों को अनसिंक्रनाइज़ किया जाता है।

लेकिन मान लीजिए कि अब आप एक पत्र भेजते हैं और उत्तर में एक संख्या होती है जिसे आपको अपने करों को करने की आवश्यकता होती है। अब आप CPU काम नहीं कर सकते - अपने करों की गणना - जब तक कि I / O ऑपरेशन पूरा नहीं हो जाता। लेकिन जब आप प्रतीक्षा कर रहे हों, तब भी आप लॉन की घास काट सकते हैं । यह एक अतुल्यकालिक वर्कफ़्लो है जिसने इसके भागों के बीच समय का संबंध व्यक्त किया है।


6

मैं एक इलेक्ट्रिकल इंजीनियर हूं, और हम लॉजिक सर्किट (लॉजिक गेट्स) में सिंक्रोनस बनाम एसिंक्रोनस से निपटते हैं।

मान लें कि आपके पास एक-गेट (या कोई गेट) है, जिसमें दो इनपुट हैं, और एक आउटपुट है।

यदि यह एसिंक्रोनस है, तो यह अपने आउटपुट को उस समय अपडेट करेगा जब कोई इनपुट इस तरह से बदलता है कि आउटपुट बदल जाता है। इस तरह आपके उदाहरण ने काम किया - आपके द्वारा उल्लेखित कार्यक्रम।

हालाँकि, यदि उस गेट में एक घड़ी (उदाहरण के लिए, 1 सेकंड की अवधि वाली चौकोर तरंग) भी जुड़ी होती है, जहाँ वह प्रत्येक सेकंड के बीट पर अपडेट होती है, क्योंकि स्क्वायर वेव कम से ऊँची होती है, तो यह सिंक्रोनस होता है। यह घड़ी की आवृत्ति के लिए बाध्य है। तो यह तुल्यकालिक है। आप उस घड़ी को कई सर्किटों में तार कर सकते हैं, और वे एक-दूसरे के साथ तालबद्ध रूप से काम करेंगे - सिंक्रनाइज़। यदि आपका प्रोग्राम केवल जाँच करता है कि क्या इसे हर सेकंड चलाने के लिए पढ़ा गया है, तो यह भी सिंक्रनाइज़ किया जाएगा।


1
एसिंक्रोनस / सिंक्रोनस सीरियल पोर्ट की तरह।
जिवोपेन

2

पृथ्वी की परिक्रमा करने वाले दो उपग्रहों की कल्पना करें।

  • सैटेलाइट ए में पृथ्वी के चारों ओर घूमने की अवधि होती है जैसे कि ग्रह के हर पूर्ण रोटेशन के लिए, उपग्रह पृथ्वी के चारों ओर एक या एक से अधिक बार चला गया है ।
  • सैटेलाइट बी में पृथ्वी के चारों ओर घूमने की अवधि होती है जैसे कि ग्रह के हर पूर्ण रोटेशन के लिए, उपग्रह पृथ्वी के चारों ओर एक समय में चला गया है ।

ऊपर दिए गए उदाहरण में सैटेलाइट बी भू-समकालिक कक्षा में है

पृथ्वी के घूर्णन के साथ रोटेशन की अवधि समकालिक होना।

कोई यह तर्क नहीं देता है कि उपग्रह ए केवल भू-समकालिक है क्योंकि यह ग्रह के रूप में "मौजूद है या उसी समय" होता है। वास्तव में, उपग्रह B स्वयं वह नहीं है जो या तो प्रासंगिक है - जो प्रासंगिक है वह रोटेशन की अवधि है जो कि पृथ्वी के रोटेशन की अवधि के लिए सिंक्रनाइज़ है। यह वस्तुओं के एक साथ अस्तित्व के बारे में नहीं है; यह वस्तुओं के बीच संबंध के बारे में है। इस विचार को पकड़ो।

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

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

इसलिए अब तक हमें कुछ अंतर्ज्ञान प्राप्त करना चाहिए कि एक संबंध का अस्तित्व यहां प्रासंगिक है, न कि केवल इन दो धागों का अस्तित्व। जब एक विधि को अतुल्यकालिक रूप से निष्पादित किया जाता है, तो हम जो कह रहे हैं, उस पद्धति का निष्पादन "एक ही समय में होने या होने की आवश्यकता नहीं है" जिस विधि से इसे लागू किया गया है। निम्नलिखित उदाहरण लें:

func Invoker() {
    DoThis();
    DoThatAsync();

    var foo = CheckThis();
    ... do some work ...
    CheckThat(foo);

    await DoThatAsync();

    CheckThat();
}

उपग्रहों की हमारी चर्चा से पहले, "यह वस्तुओं के साथ अस्तित्व के बारे में नहीं है; यह वस्तुओं के बीच संबंध के बारे में है।" यह एक आह्वान विधि और आह्वान विधि के अस्तित्व के बारे में नहीं है; यह आक्रमणकारी के निष्पादन और आह्वान के निष्पादन के बीच संबंध के अस्तित्व के बारे में है। यदि हमने अपने सिस्टम थ्रेड्स को देखा और पाया कि DoThatAsync()इसे लागू किया गया था, लेकिन निष्पादित नहीं हो रहा था, तो शायद यह शेड्यूलर या किसी अन्य I / O पर प्रतीक्षा कर रहा है, इसका मतलब यह नहीं है कि इनवॉइस विधि Invoker()निष्पादित नहीं कर रहा है - यह काम कर सकता है कर रही हो। यकीन है, यह awaitआईएनजी के बिंदु पर हो सकता है DoThatAsync(), लेकिन इसकी गारंटी नहीं है। यह एक बार लागू होने के बाद अन्य कार्यों के लिए सही नहीं है - यदि वे रुक जाते हैं,Invoker()पड़ाव - कोई बात नहीं। इसकी गारंटी है। Invoker()और आह्वान किए गए सिंक्रोनस विधि के बीच निष्पादन "एक ही समय में मौजूद या होता है"।


मुझे यह वास्तव में पसंद है। सामान्य तौर पर यह "अतुल्यकालिक" बनाम "तुल्यकालिक" के रूप में परिभाषित एक स्पष्ट निष्पादन पथ के रूप में मनमाना निष्पादन का जंगली पश्चिम है
क्रंचर

मुझे भी लगता है कि यह सबसे अच्छा जवाब है।
बरमार

2

ठोस उदाहरण

मैं कुछ वास्तविक दुनिया के उदाहरणों को जोड़ना चाहूंगा, और उन्हें सॉफ्टवेयर इंजीनियरिंग की दुनिया से जोड़ना चाहूंगा। सबसे पहले, कुछ पर विचार करें जो मुझे उम्मीद है कि "तुल्यकालिक" की आपकी सहज परिभाषा से मेल खाती है: कुछ परिस्थितियों में फायरफ्लाइज़ की चमकती चमक । दूसरा, 4x100 महिलाओं की ओलंपिक रिले रेस पर विचार करें । तीसरा, सैन्य फिल्मों से उस पुरानी ट्रॉप पर विचार करें: "पुरुष, अपनी घड़ियों को सिंक्रनाइज़ करें!"

अब, चलिए सोचते हैं कि क्या चल रहा है। आइए यह देखते हुए शुरू करें कि ये सभी चीजें प्रक्रियाएं हैं , या समय में विस्तारित हुई इकाइयां । यह कहने का कोई मतलब नहीं है कि एक कटोरा "सिंक्रोनस" है और रॉक "एसिंक्स" है। दूसरा, टैंगो में दो लगते हैं । आप यह नहीं कह सकते कि "एक धावक सिंक है"। किसके साथ सिंक करें? अंत में, दो प्रक्रियाओं के लिए एक ही समय में कुछ करने के लिए, जब तक कि उनके पास पहले से ही समान आवृत्ति और चरण न हो, एक या दोनों को इंतजार करना चाहिए

विश्लेषण

जब शब्दकोश परिभाषा कहती है कि सिंक में दो इकाइयाँ "एक ही समय में होती हैं या मौजूद होती हैं", जो फायरफ्लाइज़ से प्रकाश की अवधारणा के साथ बहुत अच्छी तरह संरेखित होती हैं। दुर्भाग्य से, यह कहना कि प्रकाश "सिंक में" है, यह कहने का एक सुस्त तरीका है कि जुगनू प्रकाश प्रक्रियाओं को सिंक्रनाइज़ करते हैं।

तो फायरफ्लाइज़ का एक समूह कैसे हो सकता है, जिनके पास संभवतः Apple स्मार्टवॉच और NTP उनके मार्गदर्शन करने के लिए नहीं हैं, एक ही समय में उनके पीछे के छोरों को फ्लैश करने का प्रबंधन करें? ठीक है, यह बहुत आसान है अगर उनके पास एक सुसंगत टेम्पो सेट करने का साधन है और इसके लिए छोटे समायोजन कर सकते हैं। वे बस फ्लैश करते हैं, और यदि अधिक लोग उनके ठीक बाद फ्लैश करते हैं, तो वे धीमा हो जाते हैं (देरी को बढ़ाते हैं), जबकि यदि उनके सामने अधिक फ्लैश सही होता है, तो वे गति बढ़ाते हैं (देरी को घटाते हैं)। इसलिए वे अनिवार्य रूप से एक ही टेम्पो और चरण पर पहुंचने के लिए एक सरल फीडबैक प्रक्रिया का उपयोग कर सकते हैं। यहां महत्वपूर्ण अवलोकन यह ध्यान रखना है कि वे फ्लैश करने के लिए सही क्षण की प्रतीक्षा करके समकालिकता प्राप्त करते हैं

4x100 की दौड़ दिलचस्प है क्योंकि आप कार्रवाई में प्रक्रिया के समय के दोनों रूपों को देखते हैं : एक टीम के भीतर धावकों को सिंक्रनाइज़ किया जाता है, जबकि अलग-अलग टीमों के धावक "async" होते हैं। रिले में दूसरा धावक तब तक इंतजार करना चाहिए जब तक कि पहला धावक स्थानांतरण क्षेत्र में प्रवेश न कर जाए । हैंड-ऑफ उन दो धावकों के बीच एक समकालिक घटना है। हालाँकि, अलग-अलग गलियों में चलने वालों को परवाह नहीं है कि एक और लेन में क्या हो रहा है , और सबसे निश्चित रूप से धीमा नहीं है और सिंक में अपने हाथ से काम करते हैं। धावकों की प्रत्येक लेन एक दूसरे के संबंध में अतुल्यकालिक है। फिर, हम देखते हैं कि तुल्यकालन प्रतीक्षा की ओर जाता है, जबकि अतुल्यकालिक नहीं होता है।

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

निर्धारक विशेषता

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

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

सीमाओं

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

यह भी ऐसा नहीं है कि आकस्मिक मिलने से समकालिकता प्रदर्शित होती है। यदि दो अजनबी सड़क पर एक-दूसरे को पास करते हैं, तो यह तथ्य कि वे किसी समय किसी विशेष स्थान पर हैं, समकालिकता साबित नहीं होती है। न ही यह तथ्य है कि एक व्यक्ति बस के इंतजार में एक बेंच पर बैठा है, और दूसरा व्यक्ति चलने के लिए होता है। जब वे किसी उद्देश्य के लिए मिलते हैं तो प्रक्रियाएँ केवल समकालिक होती हैं ।

सॉफ्टवेयर कनेक्शन

अब, चलो सॉफ्टवेयर में एक बहुत ही मौलिक कार्य के बारे में सोचते हैं: एक फ़ाइल से पढ़ना। जैसा कि आप शायद जानते हैं, कैश या मेन मेमोरी की तुलना में मास स्टोरेज आमतौर पर हजारों से लाखों गुना धीमा होता है। इस कारण से, ऑपरेटिंग सिस्टम और प्रोग्रामिंग लैंग्वेज लाइब्रेरी आमतौर पर सिंक्रोनस और एसिंक्रोनस I / O ऑपरेशंस दोनों प्रदान करते हैं। अब, भले ही आपके कार्यक्रम में केवल एक ही धागा हो, आपको ओएस के बारे में इस चर्चा के प्रयोजनों के लिए एक "अलग प्रक्रिया" के रूप में सोचना चाहिए।

सिंक

जब आप "सिंक्रोनस I / O रीड" करते हैं, तो आपके थ्रेड को डेटा उपलब्ध होने तक इंतजार करना चाहिए , जिस बिंदु पर यह जारी है। यह बहुत हद तक एक रिले रनर की तरह है जो अगले रनर को बैटन को सौंपता है, लेकिन एक रिले के बजाय केवल दो रनर्स के साथ ही ट्रैक के चारों ओर जाने की कल्पना करता है, और दूसरा रनर भी पहले से पीछे हट जाता है।

इस स्थिति में, आपके प्रोग्राम थ्रेड और OS I / O प्रक्रिया "एक ही समय में" (अभिनय) नहीं हो रही है, और इसलिए यह कहना अजीब लगता है कि ये प्रक्रिया "सिंक्रनाइज़" हैं। लेकिन यह देखने का गलत तरीका है! यह कहने जैसा है: "रिले टीम के धावक एक ही समय में नहीं चल रहे हैं, इसलिए वे सिंक्रनाइज़ नहीं हैं।" वास्तव में, दोनों कथन गलत हैं! एक रिले टीम पर धावकों करना और चाहिए लाठी के हाथ बंद: एक ही समय में चलाने के लिए, लेकिन केवल एक बहुत ही विशेष क्षण में। वास्तव में, यह दौड़ के दौरान केवल यह विशेष क्षण है जो हमें आश्वस्त करता है कि रिले टीमों के साथ शुरू करने के लिए सिंक्रनाइज़ किया जाता है! यदि हम I / O अनुरोध और प्रतिक्रिया को "बैटन" के रूप में देखते हैं,

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

प्रक्रिया विविधता

इस कारण से, हम यह देखने के लिए कुछ शर्तों का आविष्कार कर सकते हैं कि यह देखने के लिए कि तीन प्रकार की चीजें चल रही हैं: "सजातीय समकालिक", "विषम समकालिक", और "क्रमिक समकालिक"। इसलिए जब अभिनेता एक साथ एक ही कार्य कर रहे हैं (FEA, फायरफ्लाइज़), तो वे "सजातीय" हैं। जब वे एक साथ अलग-अलग कार्य कर रहे होते हैं (दौड़ने वाले बनाम रेंगते हुए बनाम अपने गंतव्यों के लिए तैरते हुए, भौतिकी बनाम ध्वनि बनाम एआई थ्रेड्स एक खेल में), वे "विषम" होते हैं। जब वे एक समय में एक कार्य कर रहे होते हैं, तो वे "अनुक्रमिक" (रिले धावक, I / O को अवरुद्ध करते हैं) होते हैं। वे बहुत अलग दिख सकते हैं, लेकिन वे एक आवश्यक संपत्ति साझा करते हैं: सभी प्रकार के अभिनेता यह सुनिश्चित करने के लिए कुछ प्रतीक्षा करते हैं कि हर कोई एक ही समय में सिंक्रनाइज़ेशन बिंदु पर पहुंचे। तुल्यकालन बिंदुओं के बीच, या "एक ही क्रिया करना" तुल्यकालन की संपत्ति के लिए अप्रासंगिक है।

एक GPU में रेंडर पाइपलाइनों को समकालिक किया जाता है क्योंकि वे सभी को एक साथ फ्रेम खत्म करना चाहिए, और एक साथ एक नया फ्रेम शुरू करना चाहिए। वे सजातीय हैं क्योंकि वे एक ही तरह का काम कर रहे हैं, और वे सभी एक साथ सक्रिय हैं। लेकिन एक सर्वर का मुख्य गेम लूप और ब्लॉकिंग इनपुट I / O थ्रेड्स, जो रिमोट इनपुट को प्रोसेस करते हैं, विषम हैं क्योंकि वे बहुत अलग तरह के काम करते हैं, और कुछ I / O थ्रेड्स कुछ भी नहीं कर पाएंगे, क्योंकि सभी नहीं कनेक्शन का उपयोग किया जाता है। फिर भी, वे सिंक्रनाइज़ हैं, क्योंकि उन्हें राज्य को परमाणु रूप से साझा करना चाहिए (एक खिलाड़ी को आंशिक गेम वर्ल्ड अपडेट नहीं देखना चाहिए, और न ही सर्वर को केवल खिलाड़ी इनपुट का एक टुकड़ा देखना चाहिए)।

async

अब, चलो एक "async I / O पढ़ा" पर विचार करें। जब आपका प्रोग्राम स्टोरेज से थोड़ा डेटा पढ़ने के लिए ओएस को रिक्वेस्ट भेजता है, तो कॉल तुरंत वापस आ जाती है । आइए कॉलबैक पर ध्यान न दें और मतदान पर ध्यान दें। सामान्य तौर पर, वह क्षण जो आपके कार्यक्रम के लिए उपलब्ध होता है, वह उस समय तक किसी विशेष बिंदु के अनुरूप नहीं होता है, जहां तक ​​आपके प्रोग्राम के थ्रेड का संबंध है। यदि आपका प्रोग्राम स्पष्ट रूप से डेटा की प्रतीक्षा नहीं कर रहा है, तो उस पल के होने पर थ्रेड वास्तव में पता भी नहीं चलेगा। यह केवल तभी पता चलेगा कि डेटा अगली बार जाँच कर रहा है।

कोई विशेष बैठक का समय नहीं है जहां ओएस और प्रोग्राम थ्रेड डेटा को सौंपने के लिए सहमत होते हैं। वे रात में गुजरने वाले दो जहाजों की तरह हैं। अतुल्यकालिक को प्रतीक्षा की इस अनुपस्थिति की विशेषता है। बेशक, प्रोग्राम थ्रेड अक्सर I / O ऑपरेशन के बाद सभी पर इंतजार करना समाप्त कर देगा, लेकिन इसकी आवश्यकता नहीं है। यह खुशी से अन्य गणनाएं करते हुए जा सकता है जबकि I / O भ्रूण हो रहा है, और केवल बाद में जांच करें जब उसके पास एक पल हो। बेशक, एक बार जब ओएस डेटा प्राप्त कर लेता है, तो वह प्रतीक्षा के आसपास नहीं बैठता है, या तो। यह सिर्फ डेटा को कहीं सुविधाजनक बनाता है और अपने व्यवसाय के बारे में बताता है। इस मामले में, यह ऐसा है जैसे प्रोग्राम बैटन को OS से दूर करता है, और OS बाद में आता है, डेटा के साथ बैटन को जमीन पर गिराता है, और ट्रैक से चलता है। कार्यक्रम हैंड-ऑफ प्राप्त करने के लिए इंतजार कर सकता है या नहीं।

समानता

जब हम किसी फ़ंक्शन को सॉफ़्टवेयर में "async" के रूप में चिह्नित करते हैं, तो अक्सर इसका मतलब है कि हम समानता चाहते हैं । लेकिन याद रखें कि समानता समानता का मतलब नहीं है । फायरफ्लाइज़ एक अच्छा उदाहरण हैं, क्योंकि उन्होंने बहुत समकालिक और अतुल्यकालिक व्यवहार दोनों का प्रदर्शन किया है। जबकि अधिकांश मक्खियां एकसमान में चमकती थीं, कई स्पष्ट रूप से बाकी समूह के साथ धुन से बाहर थीं और अधिक बेतरतीब ढंग से चमकती थीं। मक्खियाँ भले ही एक साथ काम कर रही हों , लेकिन वे सभी सिंक्रनाइज़ नहीं थीं ।

अब जब हम कुछ कोड को "async" के रूप में चिह्नित करते हैं, तो यह मज़ेदार लगता है, क्योंकि इसका अर्थ है कि शेष कोड ऐसा नहीं है जो "सिंक" हो। उस समतल का क्या मतलब है? क्या हमने इस बात पर जोर नहीं दिया कि "सिंक्रोनाइज़ेशन" के लिए दो टैंगो की आवश्यकता थी? लेकिन क्या होगा अगर हम एक ही धागे में कोड निष्पादित करने के बारे में बात कर रहे हैं? इस मामले में, हमें एक कदम वापस लेने और उन राज्यों के बीच राज्यों और बदलावों के अनुक्रम के रूप में एक कार्यक्रम के बारे में सोचने की आवश्यकता है। एक कार्यक्रम में एक बयान एक राज्य संक्रमण का कारण बनता है। हम इसे एक "सूक्ष्म प्रक्रिया" के रूप में सोच सकते हैं जो बयान के साथ शुरू और बंद हो जाता है। भाषा द्वारा परिभाषित अनुक्रम बिंदु वास्तव में, इन "सूक्ष्म प्रक्रियाओं" के सिंक्रनाइज़ेशन बिंदु हैं। और इस प्रकार, हम एक एकल-सूत्र को देख सकते हैं,

प्रोग्रामिंग भाषा की अखंडता गारंटी देती है कि राज्य अद्यतन बयानों में हस्तक्षेप नहीं करते हैं, और अनुक्रम बिंदु उन सीमाओं को परिभाषित करते हैं, जिनके लिए संकलक को पर्यवेक्षित अनुकूलन करने की अनुमति नहीं है। उदाहरण के लिए, किसी कथन के भीतर अभिव्यक्तियों के मूल्यांकन का क्रम अपरिभाषित या अधोमानक हो सकता है, जिससे संकलक को कई प्रकार से कथन का अनुकूलन करने की स्वतंत्रता मिल सकती है। लेकिन जब तक अगला बयान शुरू नहीं हो जाता, तब तक कार्यक्रम एक अच्छी तरह से परिभाषित स्थिति में होना चाहिए, अगर पीएल खुद ही ध्वनि है।

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


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

मुझे लगता है कि अन्य उदाहरण एक साथ कार्रवाई बनाम विषम कार्रवाई प्रदर्शित करते हैं, जो मुझे लगता है कि ओपी के भ्रम का कारण बना।
Lawnmower मैन

1

इसके बारे में सोचने का एक तरीका SIMD के निर्देश हैं, जैसे AVX । यहाँ कुछ उदाहरण दिए गए हैं कि उनका उपयोग कैसे किया जाता है।

सिंक्रोनस SIMD निर्देश आपको एक ही थ्रेड में, एक ही थ्रेड पर, एक से अधिक निर्देश को एक से अधिक डेटा पर संचालित करने की अनुमति देता है ।

जबकि असिंक्रोनस मल्टीथ्रेडिंग आपको "शायद" "कुछ हद तक" समान समय पर कई गणना करने की अनुमति देता है।

इसे निम्नलिखित परिभाषाओं के साथ मिलाएं:

सिंक्रोनस विशेषण syn · chro · nous | \ \Si,-krə-nˈs, -sin-

1: हो रहा है, मौजूदा, या ठीक उसी समय उत्पन्न होने वाला [जोर मेरा]

एसिंक्रोनस विशेषण asyn · chro · nous | \ (Ŋ) ā-ˈsiˌ-krə-n ,s, -ˌsin- \

1: [...]: समकालिक नहीं


1

एक सादृश्य जिसने मुझे सिंक बनाम एसिंक्स बनाम मल्टी-थ्रेडेड के बीच के अंतर को समझा, वह है रसोई में एक कुक।

सोचिए आप पास्ता बना रहे हैं। आपके पास तीन चरण हैं:

  1. पास्ता को उबालें और छान लें
  2. सॉस तैयार करें
  3. पास्ता और सॉस को मिलाएं

सिंक्रोनस विधि। सिंक्रोनस परिदृश्‍य में केवल एक ही व्‍यक्‍ति (धागा) सभी कार्य क्रम से कर रहा है। सबसे पहले आप पास्ता को उबालते हैं और आप उसे उबलते हुए देखते हैं। फिर आप इसे निकाल कर अलग रख दें। फिर आप सॉस तैयार करें। जब सॉस तैयार हो जाए तो आप पास्ता लें, इसे सॉस के साथ मिलाएं और आपका व्यंजन तैयार है। यहाँ समस्या यह अक्षम है। क्योंकि आप क्रमबद्ध तरीके से काम कर रहे थे, आप पास्ता उबालते समय सॉस पर काम नहीं कर सकते थे। तो, इसने आपको समय बर्बाद कर दिया, और सॉस तैयार होने के दौरान आपका पास्ता ठंडा हो गया।

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

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


यह वास्तव में एक बहुत अच्छा सादृश्य है।
रॉबर्ट हार्वे

0

एक अच्छा सवाल, और शब्द जो अक्सर विभिन्न तरीकों से उपयोग किए जाते हैं जो भ्रम पैदा करते हैं।

मेरा जवाब है कि ये शब्द सापेक्ष हैं - और जो वे सापेक्ष हैं, वह मुख्य कार्यक्रम है जो निष्पादित कर रहा है (या कभी-कभी एक थ्रेड के लिए)।

ये शब्द किसी प्रोग्राम के आंतरिक संचालन और समय के बारे में कुछ निर्दिष्ट करते हैं, जैसे कि संदेश अवरुद्ध तरीके (सिंक) में या गैर-अवरुद्ध तरीके से (async) भेजे या प्राप्त किए जाते हैं। यदि एक (मुख्य) धागा भेजने या प्राप्त करने से अवरुद्ध होता है, तो यह "सिंक" है और यदि यह किसी तरह से अघुलनशील है तो यह "सिंक" है। दोहराने के लिए, ये शब्द कार्यान्वयन के बारे में हैं जो दोनों (नियमित) काम करते हैं और साथ ही साथ घटनाओं को भी संभालते हैं।

(IMHO, बेशक) एक बार एक संदेश तार पर है, वहाँ सिंक बनाम async जैसी कोई चीज नहीं है। मैसेजिंग में एक प्रेषक और एक रिसीवर होता है, उनमें से प्रत्येक दूसरे के साथ एक सिंक या async कार्यान्वयन स्वतंत्र हो सकता है - लेकिन एक बार एक संदेश तार पर है, यह सिर्फ एक संदेश है, अब सिंक या async नहीं है। हम एक संदेश को अनुरोध या उत्तर या एक तरह से संदेश के रूप में वर्गीकृत कर सकते हैं, लेकिन वह सिंक और एसिंक्स के लिए ऑर्थोगोनल है (जो यह बताता है कि क्या कार्यान्वयन प्रतीक्षा को रोक रहा है या किसी तरह से बाधित हो सकता है)।


गैर-अवरोधक अतुल्यकालिक से अलग है,
user207421

1
@ user207421 कृपया विस्तृत करें, क्योंकि मैं उन्हें इस संदर्भ में पर्यायवाची
कहूंगा

0

"सिंक्रोनस" का अर्थ है कि एक ही समय में दो घटनाएं होती हैं - लेकिन कौन सी घटनाएं?

जब हम कहते हैं "तुल्यकालिक निष्पादन", हमारा मतलब है कि कॉलर और कैली एक ही समय में निष्पादित कर रहे हैं (यानी स्टैक पर)। शायद यही अर्थ है कि आप बाद में हैं।

जब हम "सिंक्रोनस लॉजिक गेट" कहते हैं, तो हमारा मतलब है कि लॉजिक गेट को सीपीयू क्लॉक के साथ सिंक किया गया है।

जब हम वितरित सिस्टम के संदर्भ में "सिंक्रोनस मॉडल" कहते हैं, तो हमारा मतलब है कि सभी नोड्स लॉक-स्टेप में अपने कार्यक्रमों को निष्पादित करते हैं, और चरण n में भेजे गए संदेशों को चरण n + 1 की शुरुआत में आने की गारंटी है।

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

... और मुझे पूरा यकीन है कि आप इस शब्द को और भी संदर्भों में लागू कर सकते हैं, क्योंकि "चीजें एक ही समय में होती हैं" काफी सामान्य विचार है। :-)


0

मुझे लगता है कि आपके भ्रम की कुंजी को इसके द्वारा संक्षेप किया जा सकता है:

Async विशेषता का अर्थ है कि जैसे ही HTML अभी भी पार्स कर रहा है, वैसे ही स्क्रिप्ट को निष्पादित किया जाएगा

एहसास करने वाली बात यह है कि इस वाक्य का कोई मतलब नहीं है क्योंकि यह एक असंभव स्थिति का वर्णन करता है। यदि HTML अभी भी पार्स कर रहा है, तो स्क्रिप्ट डाउनलोड प्रक्रिया शुरू नहीं होगी यदि यह अतुल्यकालिक है।

प्रोग्रामिंग में, तुल्यकालिक साधन:

जिस समय आप अपने तर्क को निष्पादित कर रहे हैं उस समय आपके पास पहले से मौजूद सभी डेटा स्मृति में मौजूद हैं

जबकि अतुल्यकालिक का मतलब है:

आपके द्वारा रुचि के कुछ डेटा अभी तक मौजूद नहीं हैं और केवल भविष्य में कुछ बिंदु पर मौजूद हैं

वास्तव में, यह अतुल्यकालिक प्रोग्रामिंग का वर्तमान पहलू नहीं है जो आमतौर पर लोगों को भ्रमित करता है।

स्क्रिप्ट को सामान्य रूप से कैसे लोड किया जाता है html पार्सिंग को रोक दिया जाता है, फिर स्क्रिप्ट डाउनलोड की जाती है, जब स्क्रिप्ट डाउनलोड पूरी हो जाती है तो इसे निष्पादित किया जाता है और फिर html पार्सिंग जारी रहती है। Html पार्सिंग और स्क्रिप्ट निष्पादन "एक ही" समय पर होता है (एक ही समय अर्थ एक साथ, एक साथ नहीं)।

asyncलिपियों को कैसे लोड किया जाता है html स्क्रिप्ट टैग देखता है और फिर भविष्य में स्क्रिप्ट डाउनलोड करने के लिए याद रखता है लेकिन पार्स करना जारी रखता है। HTML पार्सिंग को स्क्रिप्ट डाउनलोडिंग के लिए रोका नहीं गया है। बाद में , html पार्सिंग पूरी होने के बाद सभी async स्क्रिप्ट डाउनलोड और निष्पादित की जाती हैं। Html पार्सिंग और स्क्रिप्ट निष्पादन एक ही समय में नहीं होता है (फिर से, एक ही समय अर्थ एक साथ, इस मामले में उन्हें अलग से निष्पादित किया जाता है)।

इसलिए संक्षेप में:

  • सिंक्रोनस स्क्रिप्ट HTML के साथ एक साथ पार्स की जाती हैं।

  • अतुल्यकालिक स्क्रिप्ट भविष्य में अलग से पार्स की जाती हैं।

इसलिए asyncसंपत्ति की परिभाषा यह नहीं है कि स्क्रिप्ट को डाउनलोड होते ही निष्पादित किया जाता है - यह सिंक्रोनस और एसिंक्रोनस दोनों स्क्रिप्ट के लिए सही है। Async की परिभाषा है html पार्सिंग स्क्रिप्ट को डाउनलोड करने के लिए इंतजार नहीं करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.