मैं यहां दो अवधारणाओं के साथ काफी सहज था, लेकिन उनके साथ मेरे बारे में कुछ स्पष्ट नहीं था।
कुछ उत्तरों के माध्यम से पढ़ने के बाद, मुझे लगता है कि मेरे पास अंतर का वर्णन करने के लिए एक सही और उपयोगी रूपक है।
यदि आप कोड की अपनी अलग-अलग पंक्तियों के बारे में सोचते हैं, लेकिन कार्ड खेलने का आदेश देते हैं (मुझे रोकें अगर मैं समझा रहा हूं कि पुराने स्कूल के पंच कार्ड कैसे काम करते हैं), तो प्रत्येक अलग प्रक्रिया के लिए, आपके पास कार्डों का एक अनूठा स्टैक होगा (नहीं कॉपी और पेस्ट!) और सामान्य रूप से रन कोड के सामान्य रूप से और असिंक्रोनसली के बीच अंतर पर निर्भर करता है कि आप परवाह करते हैं या नहीं।
जब आप कोड चलाते हैं, तो आप प्रोसेसर को पास करने के लिए ओएस को एकल संचालन का एक सेट सौंपते हैं (जो आपके कंपाइलर या दुभाषिया ने आपके "उच्च" स्तर कोड को तोड़ दिया)। एक प्रोसेसर के साथ, कोड की केवल एक पंक्ति को किसी भी एक समय में निष्पादित किया जा सकता है। इसलिए, एक ही समय में कई प्रक्रियाओं को चलाने के भ्रम को पूरा करने के लिए, OS एक ऐसी तकनीक का उपयोग करता है जिसमें वह प्रोसेसर को एक बार में दिए गए प्रोसेस से कुछ ही लाइनों को भेजता है, सभी प्रक्रियाओं के बीच स्विच करता है कि यह कैसे देखता है। फिट। परिणाम एक ही समय में लगता है कि अंत उपयोगकर्ता के लिए प्रगति दिखा रहा है कई प्रक्रियाओं है।
हमारे रूपक के लिए, संबंध यह है कि ओएस हमेशा प्रोसेसर को भेजने से पहले कार्ड को फेरबदल करता है। यदि आपके कार्ड का स्टैक किसी अन्य स्टैक पर निर्भर नहीं करता है, तो आप ध्यान नहीं देते हैं कि आपका स्टैक चयनित होना बंद हो गया है जबकि एक और स्टैक सक्रिय हो गया है। इसलिए अगर आप परवाह नहीं करते हैं, तो कोई बात नहीं।
हालांकि, अगर आप देखभाल करते हैं (जैसे, कई प्रक्रियाएं हैं - या कार्ड के ढेर - जो एक दूसरे पर निर्भर करते हैं), तो ओएस का फेरबदल आपके परिणामों को खराब कर देगा।
एसिंक्रोनस कोड लिखने के लिए निष्पादन के क्रम के बीच निर्भरता को संभालने की आवश्यकता होती है, भले ही उस ऑर्डर का अंत हो। यही कारण है कि "कॉल-बैक" जैसे निर्माण का उपयोग किया जाता है। वे प्रोसेसर से कहते हैं, "करने के लिए अगली बात दूसरे स्टैक को बताएं कि हमने क्या किया"। इस तरह के उपकरणों का उपयोग करके, आपको आश्वासन दिया जा सकता है कि ओएस को अपने किसी भी निर्देश को चलाने की अनुमति देने से पहले अन्य स्टैक को अधिसूचित किया जाता है। ("If_back == false: send (no_operation)" - यह सुनिश्चित नहीं है कि क्या यह वास्तव में इसे लागू किया गया है, लेकिन तार्किक रूप से, मुझे लगता है कि यह सुसंगत है।)
समानांतर प्रक्रियाओं के लिए, अंतर यह है कि आपके पास दो ढेर हैं जो उन्हें संसाधित करने के लिए एक दूसरे और दो श्रमिकों की परवाह नहीं करते हैं। दिन के अंत में, आपको परिणामों को दो स्टैक से संयोजित करने की आवश्यकता हो सकती है, जो तब सिंक्रोनसिटी की बात होगी लेकिन, निष्पादन के लिए, आप फिर से परवाह नहीं करते हैं।
यकीन नहीं होता कि यह मदद करता है लेकिन, मुझे हमेशा कई स्पष्टीकरण मददगार लगते हैं। इसके अलावा, ध्यान दें कि अतुल्यकालिक निष्पादन एक व्यक्तिगत कंप्यूटर और इसके प्रोसेसर के लिए विवश नहीं है। आम तौर पर बोलना, यह समय के साथ व्यवहार करता है, या (और भी अधिक सामान्य रूप से बोलने वाला) घटनाओं का एक क्रम। इसलिए यदि आप नेटवर्क नोड X और उसके युग्मित स्टैक A से आश्रित स्टैक A को Y को भेजते हैं, तो सही एसिंक्रोनस कोड स्थिति का हिसाब करने में सक्षम होना चाहिए जैसे कि यह आपके लैपटॉप पर स्थानीय रूप से चल रहा था।