Node.js હજારો વિનંતીઓ (requests) કેવી રીતે હેન્ડલ કરે છે
લોકો કહે છે કે Node.js single-threaded છે.
તેમ છતાં, તે અટક્યા વગર હજારો વિનંતીઓ હેન્ડલ કરે છે, ફાઇલો વાંચે છે અને API કોલ્સ કરે છે.
તે કેવી રીતે કામ કરે છે?
તેનો જવાબ libuv છે.
libuv એ એક C library છે. તે Node.js ને asynchronous અને non-blocking I/O ક્ષમતાઓ આપે છે. JavaScript પોતાની રીતે ફાઇલો વાંચી શકતું નથી અથવા નેટવર્ક સોકેટ્સનું સંચાલન કરી શકતું નથી. Node.js તમારા ઓપરેટિંગ સિસ્ટમ સાથે વાતચીત કરવા માટે libuv નો ઉપયોગ કરે છે.
libuv વગર, જ્યારે પણ તમે ફાઇલ વાંચો ત્યારે JavaScript અટકી જાય. તમારું એપ (app) પ્રતિસાદ આપવાનું બંધ કરી દેશે (unresponsive થઈ જશે).
libuv સાથે, ફાઇલ બેકગ્રાઉન્ડમાં વાંચવામાં આવે છે. JavaScript અન્ય કોડ ચલાવવાનું ચાલુ રાખે છે.
ઉદાહરણ:
console.log("Start");
fs.readFile("data.txt", "utf8", (err, data) => {
console.log(data);
});
console.log("End");
આઉટપુટ: Start End (ફાઇલની સામગ્રી)
Node.js ફાઇલ વાંચવાનું પૂરું થાય તે પહેલાં "End" પ્રિન્ટ કરે છે. તે રાહ જોતું નથી.
libuv તમારા કોડનું સંચાલન કેવી રીતે કરે છે:
• The Event Loop: libuv એ લૂપ ચલાવે છે જે તપાસે છે કે કાર્યો (tasks) પૂર્ણ થયા છે કે નહીં. જ્યારે કાર્યો પૂર્ણ થાય છે ત્યારે તે callbacks ને ક્યુ (queue) માં મૂકે છે. • Thread Pool: JavaScript એક થ્રેડનો ઉપયોગ કરે છે. libuv વર્કર થ્રેડ્સના પૂલનો ઉપયોગ કરે છે. ડિફોલ્ટ રીતે, આ પૂલમાં 4 થ્રેડ્સ હોય છે. આ થ્રેડ્સ નીચે મુજબના ભારે કાર્યો હેન્ડલ કરે છે:
- File system ઓપરેશન્સ
- DNS lookups
- Compression
- Cryptography • Networking: libuv HTTP, TCP, અને UDP સોકેટ્સનું સંચાલન કરે છે. આ સર્વર્સને એકસાથે ઘણા કનેક્શન હેન્ડલ કરવાની મંજૂરી આપે છે. • Timers: libuv setTimeout અને setInterval હેન્ડલ કરે છે.
એક્ઝિક્યુશન ફ્લો (execution flow) આ રીતે કામ કરે છે:
- JavaScript તમારો કોડ ચલાવે છે.
- libuv ભારે કાર્યોને બેકગ્રાઉન્ડમાં લઈ જાય છે.
- JavaScript પછીની લાઇન પર આગળ વધે છે.
- જ્યારે કાર્ય પૂર્ણ થાય ત્યારે libuv Event Loop ને જાણ કરે છે.
- Event Loop તમારો callback ચલાવે છે.
એક પિઝા શોપ વિશે વિચારો.
libuv વગર, તમે કાઉન્ટર પર ઊભા રહો છો અને દર દસ સેકન્ડે પૂછો છો "શું મારું ખાવાનું તૈયાર છે?". તમે લાઇન રોકી દો છો.
libuv સાથે, તમે ઓર્ડર આપો છો, બેસી જાઓ છો અને નોટિફિકેશન માટે રાહ જુઓ છો. પિઝા તૈયાર થાય ત્યાં સુધી તમે અન્ય કામ કરવા માટે મુક્ત રહો છો.
સારાંશ:
• JavaScript execution: V8 Engine • Event Loop: libuv • File I/O: libuv • Network: libuv • Timers: libuv
libuv એ એન્જિન છે જે Node.js ને ઝડપી રાખે છે.
