यह एक दिलचस्प सवाल है।
असिंक्रोनस प्रोग्रामिंग प्रोग्रामिंग का एक प्रतिमान है जो मुख्य रूप से सिंगल थ्रेडेड है, यानी "निरंतर निष्पादन के एक थ्रेड के बाद"।
आप जावास्क्रिप्ट का संदर्भ लें, इसलिए वेब ब्राउज़र के वातावरण में उस भाषा पर चर्चा करें। एक वेब ब्राउज़र प्रत्येक विंडो में जावास्क्रिप्ट निष्पादन के किसी एकल थ्रेड चलता है, यह और (जैसे XMLHttpRequest कॉल के रूप में) नेटवर्क कनेक्शन (जैसे onclick = "someFunction()" के रूप में) की घटनाओं को संभालती है।
<script>
function performRequest() {
xmlhttp.open("GET", "someurl", true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
alert(xmlhttp.responseText);
}
}
xmlhttp.send(sometext);
}
</script>
<span onclick="performRequest()">perform request</span>
(यह केवल अवधारणाओं के प्रदर्शन के लिए एक गैर-कामकाजी उदाहरण है)।
असीमित तरीके से सब कुछ करने के लिए, नियंत्रण धागे को 'मुख्य लूप' के रूप में जाना जाता है। एक मुख्य पाश इस तरह दिखता है:
while (true) {
event = nextEvent(all_event_sources);
handler = findEventHandler(event);
handler(event);
}
यह ध्यान रखना महत्वपूर्ण है कि यह 'व्यस्त लूप' नहीं है। यह एक नींद धागा की तरह है, गतिविधि होने की प्रतीक्षा कर रहा है। गतिविधि उपयोगकर्ता (माउस मूवमेंट, एक बटन क्लिक, टाइपिंग) से इनपुट हो सकती है, या यह नेटवर्क गतिविधि (सर्वर से प्रतिक्रिया) हो सकती है।
इसलिए उपरोक्त उदाहरण में
,
- जब अवधि पर उपयोगकर्ता क्लिक करता है, एक ButtonClicked घटना उत्पन्न होगा, findEventHandler() स्पैन टैग पर ऑनक्लिक ईवेंट मिलेगा, और फिर उस हैंडलर होगा घटना के साथ बुलाया।
- जब xmlhttp अनुरोध बनाई गई है, यह घटना सूत्रों के all_event_sources सूची में जोड़ा गया है।
- performRequest() फ़ंक्शन रिटर्न के बाद, mainloop nextEvent() कदम प्रतिक्रिया की प्रतीक्षा करने पर इंतज़ार कर रहा है। इस बिंदु पर संभालने से आगे की घटनाओं को 'अवरुद्ध' नहीं किया जा रहा है।
- डेटा रिमोट सर्वर से वापस आता है, nextEvent() नेटवर्क ईवेंट देता है, इवेंट हैंडलर ऑनरेस्टस्टेटchange() विधि, विधि को कहा जाता है, और एक चेतावनी() संवाद आग लगती है।
यह ध्यान देने योग्य है कि अलर्ट() एक अवरुद्ध संवाद है। जबकि वह संवाद ऊपर है, कोई और घटना संसाधित नहीं की जा सकती है। यह वेब पृष्ठों के जावास्क्रिप्ट मॉडल की एक सनकी है कि हमारे पास आसानी से उपलब्ध विधि है जो उस पृष्ठ के संदर्भ में आगे निष्पादन को अवरुद्ध कर देगी। विशेष रूप से जावास्क्रिप्ट के बारे में
उत्तर का संपादन "यह कोई मूल्य नहीं है" से अलग है "यह नोटिंग के लायक है" जो मुझे लगता है कि आपका इरादा है। बस पाठकों के लिए भ्रम से बचने के लिए – MadMurf
@MadMurf: मैंने यह भी देखा .... और इसे ठीक किया। – mpen
>> असिंक्रोनस प्रोग्रामिंग प्रोग्रामिंग का एक प्रतिमान है जो मुख्य रूप से सिंगल थ्रेडेड है << - यहां पैडेंटिक होने की कोशिश नहीं कर रहा है, लेकिन मुझे नहीं पता कि यह कथन सत्य कैसे है। क्या असीमित प्रोग्रामिंग थ्रेड के बारे में कुछ भी बताती है, अकेले एकल बनाम एकाधिक दें? – Lee