Node.js ਹਜ਼ਾਰਾਂ ਰਿਕਵੈਸਟਾਂ (requests) ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਦਾ ਹੈ
ਲੋਕ ਕਹਿੰਦੇ ਹਨ ਕਿ Node.js single-threaded ਹੈ।
ਫਿਰ ਵੀ, ਇਹ ਰੁਕੇ ਬਿਨਾਂ ਹਜ਼ਾਰਾਂ ਰਿਕਵੈਸਟਾਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ, ਫਾਈਲਾਂ ਪੜ੍ਹਦਾ ਹੈ, ਅਤੇ API calls ਕਰਦਾ ਹੈ।
ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ?
ਇਸਦਾ ਜਵਾਬ libuv ਹੈ।
libuv ਇੱਕ C library ਹੈ। ਇਹ Node.js ਨੂੰ asynchronous ਅਤੇ non-blocking I/O ਸਮਰੱਥਾਵਾਂ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ। JavaScript ਆਪਣੇ ਆਪ ਫਾਈਲਾਂ ਨਹੀਂ ਪੜ੍ਹ ਸਕਦੀ ਜਾਂ network sockets ਨੂੰ ਮੈਨੇਜ ਨਹੀਂ ਕਰ ਸਕਦੀ। Node.js ਤੁਹਾਡੇ operating system ਨਾਲ ਗੱਲ ਕਰਨ ਲਈ libuv ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।
libuv ਤੋਂ ਬਿਨਾਂ, ਹਰ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ ਫਾਈਲ ਪੜ੍ਹਦੇ ਹੋ, JavaScript ਰੁਕ ਜਾਵੇਗੀ। ਤੁਹਾਡੀ ਐਪ (app) unresponsive ਹੋ ਜਾਵੇਗੀ।
libuv ਦੇ ਨਾਲ, ਫਾਈਲ background ਵਿੱਚ ਪੜ੍ਹੀ ਜਾਂਦੀ ਹੈ। JavaScript ਦੂਜਾ ਕੋਡ ਚਲਾਉਂਦੀ ਰਹਿੰਦੀ ਹੈ।
Example:
console.log("Start");
fs.readFile("data.txt", "utf8", (err, data) => {
console.log(data);
});
console.log("End");
Output: Start End (ਫਾਈਲ ਦੀ ਸਮੱਗਰੀ)
Node.js ਫਾਈਲ ਪੜ੍ਹਨ ਦੇ ਖਤਮ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ "End" ਪ੍ਰਿੰਟ ਕਰ ਦਿੰਦਾ ਹੈ। ਇਹ ਉਡੀਕ ਨਹੀਂ ਕਰਦਾ।
libuv ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਕਿਵੇਂ ਮੈਨੇਜ ਕਰਦਾ ਹੈ:
• The Event Loop: libuv ਉਸ ਲੂਪ (loop) ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ ਜੋ ਚੈੱਕ ਕਰਦਾ ਹੈ ਕਿ ਕੰਮ ਖਤਮ ਹੋ ਗਏ ਹਨ ਜਾਂ ਨਹੀਂ। ਜਦੋਂ ਕੰਮ ਪੂਰੇ ਹੋ ਜਾਂਦੇ ਹਨ, ਇਹ callbacks ਨੂੰ ਇੱਕ queue ਵਿੱਚ ਪਾ ਦਿੰਦਾ ਹੈ। • Thread Pool: JavaScript ਇੱਕ thread ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ। libuv worker threads ਦੇ ਇੱਕ pool ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਡਿਫੌਲਟ ਰੂਪ ਵਿੱਚ, ਇਸ pool ਵਿੱਚ 4 threads ਹੁੰਦੇ ਹਨ। ਇਹ threads ਭਾਰੀ ਕੰਮਾਂ ਨੂੰ ਸੰਭਾਲਦੇ ਹਨ ਜਿਵੇਂ ਕਿ:
- File system operations
- DNS lookups
- Compression
- Cryptography • Networking: libuv HTTP, TCP, ਅਤੇ UDP sockets ਨੂੰ ਮੈਨੇਜ ਕਰਦਾ ਹੈ। ਇਹ ਸਰਵਰਾਂ ਨੂੰ ਇੱਕੋ ਸਮੇਂ ਕਈ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਸੰਭਾਲਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ। • Timers: libuv setTimeout ਅਤੇ setInterval ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ।
Execution flow ਇਸ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਦਾ ਹੈ:
- JavaScript ਤੁਹਾਡਾ ਕੋਡ ਚਲਾਉਂਦੀ ਹੈ।
- libuv ਭਾਰੀ ਕੰਮਾਂ ਨੂੰ background ਵਿੱਚ ਲੈ ਜਾਂਦਾ ਹੈ।
- JavaScript ਅਗਲੀ ਲਾਈਨ 'ਤੇ ਚਲੀ ਜਾਂਦੀ ਹੈ।
- ਜਦੋਂ ਕੰਮ ਪੂਰਾ ਹੋ ਜਾਂਦਾ ਹੈ, libuv Event Loop ਨੂੰ ਸੂਚਿਤ ਕਰਦਾ ਹੈ।
- Event Loop ਤੁਹਾਡਾ callback ਚਲਾਉਂਦਾ ਹੈ।
ਇੱਕ ਪੀਜ਼ਾ ਸ਼ਾਪ ਬਾਰੇ ਸੋਚੋ।
libuv ਤੋਂ ਬਿਨਾਂ, ਤੁਸੀਂ ਕਾਊਂਟਰ 'ਤੇ ਖੜ੍ਹੇ ਹੁੰਦੇ ਹੋ ਅਤੇ ਹਰ ਦਸ ਸੈਕਿੰਡ ਬਾਅਦ ਪੁੱਛਦੇ ਹੋ "ਕੀ ਮੇਰਾ ਖਾਣਾ ਤਿਆਰ ਹੈ?" ਤੁਸੀਂ ਲਾਈਨ ਨੂੰ ਰੋਕ ਦਿੰਦੇ ਹੋ।
libuv ਦੇ ਨਾਲ, ਤੁਸੀਂ ਆਰਡਰ ਕਰਦੇ ਹੋ, ਬੈਠ ਜਾਂਦੇ ਹੋ, ਅਤੇ ਨੋਟੀਫਿਕੇਸ਼ਨ ਦੀ ਉਡੀਕ ਕਰਦੇ ਹੋ। ਪੀਜ਼ਾ ਤਿਆਰ ਹੋਣ ਤੱਕ ਤੁਸੀਂ ਹੋਰ ਕੰਮ ਕਰਨ ਲਈ ਆਜ਼ਾਦ ਰਹਿੰਦੇ ਹੋ।
Summary:
• JavaScript execution: V8 Engine • Event Loop: libuv • File I/O: libuv • Network: libuv • Timers: libuv
libuv ਉਹ ਇੰਜਣ ਹੈ ਜੋ Node.js ਨੂੰ ਤੇਜ਼ ਰੱਖਦਾ ਹੈ।
