जिसका उद्देश्य उत्सुकता और पेशेवर विकास के क्रॉस पर डेवलपर्स के लिए डिज़ाइन किया गया है, इसका उद्देश्य यह समझाना है कि असंक्रोनिक प्रोग्रामिंग अनुप्रयोगों की प्रदर्शन, स्केलेबलता और प्रतिक्रियाशीलता को कैसे बढ़ा सकता है. गैर-ब्लॉक ऑपरेशन और घटना चक्र के सार्वभौमिक सिद्धांतों पर ध्यान केंद्रित करके, हम AsyncIO, Node.js, या Go जैसे विशिष्ट प्रौद्योगिकियों को पार करते हैं.
यह शोध सॉफ्टवेयर डेवलपर्स के लिए बनाया गया है जो तकनीकी जर्गन की जटिलता के बिना आधुनिक सॉफ्टवेयर को चलाने की दक्षताओं को समझने के लिए उत्सुक हैं।
यह सोचें कि एकल तार अनुरोधों का प्रबंधन एक व्यस्त शहर में एक एकल लाइन सड़क की तरह है: प्रत्येक अनुरोध एक कार है, और जब केवल एक लाइन है, तो कारों को लाइन में रखा जाता है, जो देरी का कारण बनता है।
यह प्रणाली ट्रैफ़िक को सुचारू रूप से प्रवाह में रखती है, यह सुनिश्चित करती है कि कोई कार (या कार्य) बहुत लंबे समय तक इंतजार नहीं करता है, जो सटीक रूप से एक असंक्रोनिक चलने का समय हमारे सॉफ्टवेयर को कुशलता से चलाता रखता है।
हम एक सेवा के उदाहरण पर विचार करें जो आई / ओ ऑपरेशनों को सिंक्रनाइज़ रूप से पूरा करता है. स्पष्टता के लिए, इन ऑपरेशनों को चार्ट में मुख्य निष्पादन प्रवाह के बाहर दिखाया जाता है:
आपकी सेवा के स्टार्टअप चरण के दौरान इन/ओ ब्लॉक करना स्वीकार्य हो सकता है, लेकिन बाहरी अनुरोधों को संसाधित करते समय इस दृष्टिकोण से बचने की सलाह दी जाती है।
ये उदाहरण उन परिदृश्यों को उजागर करते हैं जहां सर्वर के प्रदर्शन लाभ को अधिकतम किया जाता है. हालांकि, गैर-ब्लॉकिंग ऑपरेशनों का लाभ आने वाले अनुरोधों की किसी भी आवृत्ति पर बना रहता है. यहां तक कि कम से कम आदर्श परिस्थितियों में, समर्पित आई / ओ थ्रेड को प्रसंस्करण कार्य प्रवाह में एकीकृत करने से प्रदर्शन लाभ होता है.
एक अनुरोध को संसाधित करने के लिए आवश्यक कुल समय (क्लाइंट के प्रारंभिक अनुरोध से लेकर अंतिम प्रतिक्रिया तक, जैसा कि दाईं ओर ब्लू नंबर द्वारा चित्रित किया गया है) हमेशा कम हो जाएगा, जब तक कि सभी अनुरोधों को संसाधित करने के लिए पर्याप्त तार हैं।
हम तब एक प्रथा का सामना करते हैं जो कई डेवलपर्स के लिए विरोधाभासी लग सकती है. जब आई / ओ ऑपरेशन अनुरोध प्रसंस्करण समय का एक महत्वपूर्ण हिस्सा बनाते हैं, तो अन्य कोड सेगमेंट का अनुकूलन थोड़ा सुधार ला सकता है. एक कैश से डेटा प्राप्त करने की अवधि व्यापार तर्क और टेम्पलेट रेंज के लिए समर्पित समय के साथ निकटता से मेल खा सकती है.
कैशिंग या प्रक्रिया में एक डेटाबेस का उपयोग करना अन्य प्रसंस्करण गतिविधियों की तुलना में डेटा रिकॉर्डिंग समय को कम कर सकता है।
कोड को प्रभावी ढंग से विभाजित करने और कॉलबैक निष्पादन को सुविधाजनक बनाने के लिए, आप अगले घटना लूप चक्र में आगे बढ़ने के लिए संचालन समय को निर्देशित कर सकते हैं।
// callbacks function function func1_cb(str, cb) { var res = func1(str); cb(res); } function func2_cb(str, cb) { var res = func2(str); cb(res); } // non-blocking callbacks function func1_cb(str, cb) { var res = func1(str); process.nextTick(function () { cb(res); } } function func2_cb(str, cb) { var res = func2(str); process.nextick(function () { cb(res); }); } // use example function1_cb(content, function (str) function {2_cb(str, function (result { // work with result } } }); }
// blocking callbacks
function func1_cb(str, cb) {
var res = func1(str);
cb(res);
}
function func2_cb(str, cb) {
var res = func2(str);
cb(res);
}
// non-blocking callbacks
function func1_cb(str, cb) {
var res = func1(str);
process.nextTick(function () {
cb(res);
});
}
function func2_cb(str, cb) {
var res = func2(str);
process.nextTick(function () {
cb(res);
});
}
// usage example
func1_cb(content, function (str) {
func2_cb(str, function (result) {
// work with result
});
});
गणनाओं के दो भागों को विभाजित करने के लिए इस पद्धति को अपनाकर, लगभग एक साथ अनुरोध पहुंचने वाले परिदृश्यों के लिए समग्र प्रसंस्करण समय समान रहता है. हालांकि, पहले अनुरोध का जवाब देरी हो जाता है:
यह परिदृश्य "अगला टैक" रणनीति का उपयोग करते समय सबसे कम अनुकूल परिणाम का प्रतिनिधित्व करता है। जैसा कि प्रारंभिक उदाहरण में दिखाया गया है, "अगला टैक" विधि दुर्लभ अनुरोधों के लिए अनुकूल साबित होती है। अनुरोधों को मध्यम गति से पहुंचने पर, इस तकनीक का लाभ उठाकर नए अनुरोधों की शुरुआत और निष्पादन ब्रेक के दौरान गैर-ब्लॉकिंग ऑपरेशनों की शुरुआत को अंतराल करने की अनुमति देकर प्रसंस्करण की गति बढ़ जाती है।
संक्षेप में, गैर-ब्लॉकिंग आई / ओ को अपनाना अनुप्रयोग प्रदर्शन को बढ़ाने के लिए महत्वपूर्ण है और छोटे और भारी आने वाले अनुरोध मात्रा वाले वातावरणों में फायदेमंद है। इसके अलावा, निष्पादन प्रवाह को प्रभावी ढंग से अनुक्रमित करना - "अगले टैक" तकनीक के समान अवधारणाओं द्वारा दर्शाया गया - सर्वर दक्षता में काफी सुधार करता है।