समकालिक और अतुल्यकालिक जावास्क्रिप्ट को समझना - भाग 1
एक समय का तथा अतुल्यकालिक विशेष रूप से शुरुआती के लिए जावास्क्रिप्ट में अवधारणाओं को भ्रमित कर रहे हैं। दो या अधिक चीजें हैं एक समय का जब वे उसी समय हुआ (सिंक में), और अतुल्यकालिक जब वे नहीं करते हैं (सिंक में नहीं).
हालाँकि इन परिभाषाओं को लेना आसान है, यह वास्तव में देखने में जितनी जटिल है, उससे कहीं अधिक जटिल है। हमें ध्यान में रखना होगा वास्तव में क्या सिंक में हैं, तथा क्या नहीं है.
आप शायद कॉल करेंगे साधारण
जावास्क्रिप्ट तुल्यकालिक में कार्य, है ना? और अगर ऐसा कुछ है setTimeout ()
या AJAX कि आप के साथ काम कर रहे हैं, आप इसे अतुल्यकालिक होने के रूप में संदर्भित करेंगे, हाँ? अगर मैं आपको बताऊं तो क्या होगा दोनों एक तरह से अतुल्यकालिक हैं?
समझाने के लिए क्यूं कर, हमें मदद के लिए श्री एक्स की ओर मुड़ने की आवश्यकता है.
परिदृश्य 1 - श्री एक्स तुल्यकालन की कोशिश कर रहा है
यहाँ सेटअप है:
- मिस्टर एक्स वह व्यक्ति है जो कठिन सवालों के जवाब दे सकता है और किसी भी अनुरोधित कार्य को अंजाम दे सकता है.
- उससे संपर्क करने का एकमात्र तरीका फोन कॉल के माध्यम से है.
- जो भी प्रश्न या कार्य आपको मिला, उसे बाहर ले जाने के लिए मिस्टर एक्स से मदद माँगने के लिए; आप उसे कॉल करें.
- श्री एक्स आपको जवाब देता है या कार्य पूरा करता है बिल्कुल अभी, और आपको बता देता है हॊ गया.
- आप रिसीवर महसूस सामग्री डाल दिया और एक फिल्म के लिए बाहर जाना.
आपने अभी जो कुछ किया है, वह था तुल्यकालिक (आगे और पीछे) संचार मिस्टर एक्स के साथ। उसने सुना कि आप उससे अपना सवाल पूछ रहे हैं, और जब आप उसका जवाब दे रहे थे, तो उसने सुन लिया.
परिदृश्य 2 - श्री एक्स सिंक्रानिसिटी से खुश नहीं है
चूंकि मिस्टर एक्स इतना कुशल है, इसलिए उसे कई और कॉल आने लगते हैं। तो क्या होता है जब आप उसे बुलाते हैं लेकिन वह पहले से ही व्यस्त है किसी और से बात कर रहा है? जब तक वह आपकी कॉल रिसीव करने के लिए स्वतंत्र नहीं है, तब तक आप उससे अपना सवाल नहीं पूछ पाएंगे। आप सभी सुनेंगे एक व्यस्त स्वर है.
तो मिस्टर एक्स इसका मुकाबला करने के लिए क्या कर सकता है?
सीधे कॉल लेने के बजाय:
- मिस्टर एक्स एक नए लड़के, मिस्टर एम को हायर करता है और उसे कॉल करने वालों के लिए एक आंसरिंग मशीन देता है संदेश छोड़ने के लिए.
- श्री एम का काम है एक संदेश पर पास श्री एक्स को उत्तर देने वाली मशीन से एक बार जब वह जानता है कि श्री एक्स पिछले सभी संदेशों को पूरी तरह से संसाधित कर चुका है और पहले से ही है एक नया लेने के लिए स्वतंत्र.
- तो अब जब आप उसे बुलाते हैं, तो एक व्यस्त लहजे के बजाय, आपको मिस्टर एक्स के लिए एक संदेश छोड़ना पड़ता है, फिर आप उसे वापस बुलाने के लिए प्रतीक्षा करें (अभी तक कोई मूवी का समय नहीं).
- एक बार मिस्टर एक्स को आपके द्वारा प्राप्त सभी कतारबद्ध संदेशों के साथ किया जाता है, वह आपके मुद्दे पर ध्यान देगा, और मैं तुम्हें वापस फोन करता हूँ आपको जवाब देने के लिए.
अब यहाँ सवाल है: क्या अब तक की कार्रवाई थी सिंक्रोनस या एसिंक्रोनस?
यह मिश्रित है। जब आपने अपना संदेश छोड़ा, श्री एक्स इसे नहीं सुन रहे थे, इसलिए आगे संचार अतुल्यकालिक था.
लेकिन, जब उसने जवाब दिया, आप सुन रहे थे, कौन कौन से रिटर्न संचार को तुल्यकालिक बनाता है.
मुझे उम्मीद है कि अब तक आपने एक बेहतर समझ हासिल कर ली होगी कि संचार के संदर्भ में सिंक्रोनाइजेशन को कैसे माना जाता है। जावास्क्रिप्ट में लाने का समय.
जावास्क्रिप्ट - एक अतुल्यकालिक प्रोग्रामिंग भाषा
जब कोई जावास्क्रिप्ट को अतुल्यकालिक लेबल करता है, तो वे सामान्य रूप से क्या उल्लेख कर रहे हैं कि आप कैसे कर सकते हैं एक संदेश छोड़ें इसके लिए, और आपकी कॉल को अवरुद्ध नहीं किया गया है व्यस्त स्वर के साथ.
फ़ंक्शन कॉल हैं जावास्क्रिप्ट में प्रत्यक्ष नहीं, वे सचमुच कर रहे हैं संदेशों के माध्यम से.
जावास्क्रिप्ट एक का उपयोग करता है संदेश कतार जहां आने वाले संदेश (या ईवेंट) आयोजित किए जाते हैं। एक घटना लूप (एक संदेश प्रेषणकर्ता) उन संदेशों को क्रमिक रूप से प्रेषित करता है a कॉल स्टैक संदेशों के संबंधित कार्य जहां हैं फ्रेम के रूप में खड़ी (कार्य तर्क और चर) निष्पादन के लिए.
कॉल स्टैक को बुलाया जा रहा है प्रारंभिक फ़ंक्शन का फ्रेम, और फ़ंक्शन के लिए कोई अन्य फ़्रेम कहा जाता है नेस्टेड कॉल के माध्यम से उसके ऊपर .
जब कोई संदेश कतार में शामिल होता है, तो वह तब तक प्रतीक्षा करता है जब तक कि कॉल स्टैक न हो पिछले संदेश से सभी फ़्रेमों का खाली होना, और जब यह है, घटना-पाश पिछले संदेश को हटाता है, और कॉल स्टैक पर वर्तमान संदेश के संबंधित फ़्रेम जोड़ता है.
कॉल स्टैक बनने तक संदेश फिर से इंतजार करता है अपने स्वयं के तख्ते के खाली (यानी सभी स्टैक किए गए कार्यों का निष्पादन खत्म हो गया है), फिर समाप्त हो गया है.
निम्नलिखित कोड पर विचार करें:
function foo () फ़ंक्शन बार () foo (); फ़ंक्शन बाज़ () बार (); बाज ();
चलाया जा रहा कार्य है baz ()
(कोड स्निपेट की अंतिम पंक्ति में), जिसके लिए एक संदेश कतार में जोड़ा जाता है, और जब इवेंट-लूप इसे उठाता है, तो कॉल स्टैक स्टैकिंग फ्रेम शुरू होता है के लिये baz ()
, बार ()
, तथा foo ()
निष्पादन के प्रासंगिक बिंदुओं पर.
एक बार जब फंक्शंस का निष्पादन एक-एक करके पूरा हो जाता है, तो उनके फ्रेम होते हैं कॉल स्टैक से निकाला गया, जबकि संदेश है अभी भी कतार में इंतजार कर रहे हैं, जब तक baz ()
स्टैक से popped है.
याद रखें, फ़ंक्शन कॉल हैं जावास्क्रिप्ट में प्रत्यक्ष नहीं, वे कर रहे हैं संदेशों के माध्यम से. इसलिए जब भी आप किसी को यह कहते हुए सुनते हैं कि जावास्क्रिप्ट स्वयं एक अतुल्यकालिक प्रोग्रामिंग भाषा है, तो मान लें कि वे इसके अंतर्निहित बारे में बात कर रहे हैं “जवाब देने वाली मशीन”, और आप संदेश छोड़ने के लिए कैसे स्वतंत्र हैं.
लेकिन विशिष्ट अतुल्यकालिक तरीकों के बारे में क्या?
अब तक मैंने एपीआई जैसे पर टच नहीं किया है setTimeout ()
और AJAX, वे हैं जो हैं विशेष रूप से अतुल्यकालिक के रूप में जाना जाता है. ऐसा क्यों है?
यह समझना महत्वपूर्ण है कि वास्तव में तुल्यकालिक या अतुल्यकालिक क्या है। जावास्क्रिप्ट, घटनाओं और घटना-पाश की मदद से अभ्यास कर सकता है संदेशों की अतुल्यकालिक प्रसंस्करण, किन्तु वह मतलब नहीं है सब कुछ जावास्क्रिप्ट में अतुल्यकालिक है.
याद रखें, मैंने आपको बताया था कि कॉल स्टैक होने तक संदेश नहीं छोड़ा गया था अपने संगत तख्ते के खाली, ठीक वैसे ही जब तक आपको अपना जवाब नहीं मिला - तब तक आप किसी फिल्म के लिए नहीं निकले समकालिक होना, तुम वहाँ इंतज़ार कर रहे हो जब तक कार्य पूरा नहीं होता, और आपको जवाब मिल जाएगा.
इंतज़ार कर रही सभी परिदृश्यों में आदर्श नहीं है. क्या होगा अगर एक संदेश छोड़ने के बाद, प्रतीक्षा करने के बजाय, आप फिल्म के लिए छोड़ सकते हैं? क्या होगा यदि कोई फ़ंक्शन रिटायर हो सकता है (कॉल स्टैक खाली करना), और फ़ंक्शन का कार्य पूरा होने से पहले ही इसका संदेश समाप्त हो सकता है? क्या होगा अगर आप कोड को एसिंक्रोनस रूप से निष्पादित कर सकते हैं?
यह वह जगह है जहां एपीआई जैसे कि setTimeout ()
और AJAX चित्र में आते हैं, और वे क्या करते हैं ... पकड़ो, मैं इसे श्री एक्स पर वापस जाने के बिना नहीं समझा सकता हूं, जिसे हम इस लेख के दूसरे भाग में देखेंगे। बने रहें.