इस पर उत्तरों का भार है, लेकिन यह भ्रामक हो सकता है। मुझे यह इस तरह से सोचना पसंद है, और शायद यह मदद करता है? "
समवर्ती प्रोग्रामिंग कोड है जो निष्पादन के आदेश की परवाह नहीं करता है। जावा समवर्ती प्रोग्रामिंग के लिए एक खराब भाषा है, लेकिन मदद करने के लिए लाइब्रेरी और फ्रेमवर्क हैं। जावास्क्रिप्ट समवर्ती प्रोग्रामिंग के लिए एक उत्कृष्ट भाषा है, और यह अक्सर मुश्किल होता है जब आप कुछ लिखना चाहते हैं जोसमवर्ती नहीं है (उदाहरण के लिए, यदि आप निष्पादन के आदेश को लागू करना चाहते हैं)। समवर्ती प्रोग्रामिंग ईवेंट-चालित प्रोग्रामिंग के लिए बहुत अच्छा है (जहां निष्पादन का क्रम ईवेंट श्रोताओं द्वारा निर्धारित किया जाता है, जैसे आपके ब्राउज़र में चलने वाला कोड जो तब काम करता है जब आप एक बटन क्लिक करते हैं या बॉक्स में टाइप करते हैं)।
एक उदाहरण में सौ HTTP अनुरोध बनाना शामिल होगा। NodeJS में, कॉलबैक पद्धति के साथ एक बार में सभी 100 अनुरोधों को खोलना सबसे सरल उपाय है, और जब प्रतिक्रियाएं वापस आती हैं, तो प्रत्येक बार एक विधि निष्पादित होती है। यह समवर्ती प्रोग्रामिंग है। रूबी में, सबसे सरल (सबसे आम) समाधान एक अनुरोध खोलना है और प्रतिक्रिया को संभालना है, अगला अनुरोध खोलना है और प्रतिक्रिया को संभालना है, आदि कई अनुरोधों के लिए, NodeJS एक समय पर फैशन में करना आसान है, हालांकि आपको होना चाहिए सर्वर को हथौड़ा करने या अपने आउटबाउंड कनेक्शन को अधिकतम करने से बचने के लिए सावधान रहें (गलती से करना आसान)। आप रूबी को समवर्ती तरीके से लिख सकते हैं, लेकिन यह नहीं है कि सबसे रूबी कोड कैसे लिखा जाता है, और इसे करने के लिए थोड़ा दर्द होता है।
समानांतर प्रोग्रामिंगवह कोड है जिसे एक साथ कई थ्रेड्स या प्रक्रियाओं में चलाया जा सकता है। यह आपको कई सीपीयू (अक्सर कई मशीनों सहित, जैसे आप अक्का के साथ हो सकता है) में कोड चलाकर प्रदर्शन का अनुकूलन करने की अनुमति देता है। क्योंकि NodeJS बहु-थ्रेडेड नहीं है और कोई समानांतर निष्पादन नहीं है, इसलिए आपको थ्रेडसेफ़ कोड लिखने के बारे में चिंता करने की ज़रूरत नहीं है (और सबसे जावास्क्रिप्ट कोड जो मैंने देखा है थ्रेडसेफ़ नहीं है)। जावा में, भले ही भाषा समवर्ती प्रोग्रामिंग को सामान्य पैटर्न नहीं बनाती है, समानांतर प्रोग्रामिंग बहुत अधिक अंतर्निहित है, और आपको अक्सर थ्रेड-सुरक्षा के बारे में चिंता करना पड़ता है। यदि आप जावा में एक वेबसाइट लिख रहे हैं, तो आमतौर पर यह एक कंटेनर में चलाया जाएगा, जो एक ही मेमोरी में एक अलग थ्रेड में प्रत्येक अनुरोध चलाता है,
उपरोक्त कुछ उस दायरे और सीमाओं पर निर्भर करता है जिसकी आप बात कर रहे हैं। मैं वेबसाइट्स पर काम करता हूं। अधिकांश जावा कोड जो मैं देख रहा हूं वह समवर्ती प्रोग्रामिंग नहीं है। निश्चित रूप से, यदि आप पर्याप्त रूप से ज़ूम आउट करते हैं, तो ग्राहक के अनुरोध का क्रम महत्वपूर्ण नहीं है, लेकिन यदि आप इससे आगे किसी भी चीज़ पर ज़ूम करते हैं, तो जो ऑर्डर निष्पादित होता है वह कोड द्वारा निर्धारित होता है। लेकिन कोड ऐसा लिखा जाता है कि अनुरोध बहुत सी साझा वस्तुओं के साथ समानांतर रूप से निष्पादित हो सकता है जो थ्रेड-सुरक्षित होना चाहिए।
इस बीच, अधिकांश जावास्क्रिप्ट कोड जो मैं देख रहा हूं वह समवर्ती है: यह इस तरह से लिखा गया है कि निष्पादन का क्रम कई स्तरों पर महत्वहीन है। लेकिन यह साझा स्मृति में समानांतर निष्पादन का समर्थन करने के लिए नहीं लिखा गया है। निश्चित रूप से, आप समान कोड को कई प्रक्रियाओं में समानांतर में निष्पादित कर सकते हैं, लेकिन ऑब्जेक्ट साझा नहीं किए जाते हैं, इसलिए यह किसी भी अर्थ में समानांतर प्रोग्रामिंग नहीं है।
अतिरिक्त पढ़ने के लिए, मैं वास्तव में इस प्रश्न के शीर्ष उत्तर में दिए गए उदाहरणों को पसंद करता हूं: https://www.quora.com/What-are-the-differences-between-parallel-concurrent-and-asynchronous-programming