Node.js Event Loop ਨੂੰ ਸਮਝਣਾ
Event Loop ਕੋਈ ਵਰਕਰ ਨਹੀਂ ਹੈ। ਇਹ ਇੱਕ ਕੋਆਰਡੀਨੇਟਰ ਹੈ।
ਬਹੁਤ ਸਾਰੇ ਡਿਵੈਲਪਰਾਂ ਨੂੰ Event Loop ਗੁੰਝਲਦਾਰ ਲੱਗਦਾ ਹੈ। ਮੁਸ਼ਕਲ ਅਕਸਰ ਇੱਕੋ ਸਮੇਂ ਬਹੁਤ ਸਾਰੇ ਸੰਕਲਪਾਂ (concepts) ਨੂੰ ਮਿਲਾਉਣ ਕਾਰਨ ਆਉਂਦੀ ਹੈ। ਤੁਹਾਨੂੰ libuv, Call Stack, Promises, ਅਤੇ I/O ਸਭ ਨੂੰ ਇੱਕੋ ਸਮੇਂ ਟਰੈਕ ਕਰਨਾ ਪੈਂਦਾ ਹੈ।
ਇੱਥੇ ਇੱਕ ਸਧਾਰਨ ਸੱਚਾਈ ਹੈ। Event Loop ਕੰਮ ਦਾ ਸ਼ਡਿਊਲ (schedule) ਬਣਾਉਂਦਾ ਹੈ। ਇਹ ਕੰਮ ਨਹੀਂ ਕਰਦਾ।
JavaScript ਇੱਕ ਸਿੰਗਲ ਥ੍ਰੈਡ (single thread) 'ਤੇ ਚੱਲਦਾ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਕੋਡ ਇੱਕ ਸਿੱਧੀ ਲਾਈਨ ਵਿੱਚ ਚੱਲਦਾ ਹੈ। ਅਗਲਾ ਕੰਮ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਇੱਕ ਕੰਮ ਦਾ ਖਤਮ ਹੋਣਾ ਜ਼ਰੂਰੀ ਹੈ। ਸਾਨੂੰ ਫਾਈਲਾਂ ਪੜ੍ਹਨ ਜਾਂ ਨੈੱਟਵਰਕ ਰਿਕੁਐਸਟਾਂ ਵਰਗੇ asynchronous ਕੰਮਾਂ ਨੂੰ ਪੂਰੇ ਪ੍ਰੋਗਰਾਮ ਨੂੰ ਰੋਕੇ ਬਿਨਾਂ ਪ੍ਰਬੰਧਿਤ ਕਰਨ ਲਈ ਇੱਕ ਸਿਸਟਮ ਦੀ ਲੋੜ ਹੈ।
ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ:
Event Loop ਵੱਖ-ਵੱਖ ਕਿਊਜ਼ (queues) ਤੋਂ callbacks ਨੂੰ Call Stack ਵਿੱਚ ਲਿਆਉਂਦਾ ਹੈ। ਹਰੇਕ ਫੇਜ਼ (phase) ਨੂੰ ਇੱਕ ਲਾਈਨ ਵਾਂਗ ਸਮਝੋ। Event Loop ਉਹ ਵਿਅਕਤੀ ਹੈ ਜੋ ਲੋਕਾਂ ਨੂੰ ਲਾਈਨ ਵਿੱਚੋਂ ਕਮਰੇ ਦੇ ਅੰਦਰ ਲੈ ਕੇ ਜਾਂਦਾ ਹੈ।
ਮੁੱਖ ਫੇਜ਼ (phases) ਇਹ ਹਨ:
- Timers: setTimeout ਅਤੇ setInterval ਤੋਂ callbacks ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ।
- Pending Callbacks: TCP errors ਵਰਗੀਆਂ ਖਾਸ ਸਿਸਟਮ ਗਲਤੀਆਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ।
- Idle ਅਤੇ Prepare: libuv ਦੁਆਰਾ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਅੰਦਰੂਨੀ ਫੇਜ਼। ਤੁਸੀਂ ਇਹਨਾਂ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰੋਗੇ।
- Poll: ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਫੇਜ਼। ਇਹ ਫਾਈਲ ਰੀਡ ਜਾਂ HTTP ਰਿਕੁਐਸਟਾਂ ਵਰਗੀਆਂ ਨਵੀਆਂ I/O ਈਵੈਂਟਸ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ।
- Check: setImmediate callbacks ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ।
- Close Callbacks: socket closures ਵਰਗੀਆਂ ਬੰਦ ਹੋਣ ਵਾਲੀਆਂ ਈਵੈਂਟਸ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ।
ਇੱਕ ਆਮ ਗਲਤੀ ਇਹ ਸੋਚਣਾ ਹੈ ਕਿ Event Loop ਦਾ ਆਪਣਾ Call Stack ਹੁੰਦਾ ਹੈ। ਅਜਿਹਾ ਨਹੀਂ ਹੈ। Runtime ਕੋਲ ਇੱਕ ਸਿੰਗਲ Call Stack ਅਤੇ ਇੱਕ microtask queue ਹੁੰਦੀ ਹੈ।
ਪ੍ਰਕਿਰਿਆ ਇਸ ਫਲੋ (flow) ਦੀ ਪਾਲਣਾ ਕਰਦੀ ਹੈ:
- Event Loop ਮੌਜੂਦਾ ਫੇਜ਼ ਤੋਂ ਇੱਕ callback ਚੁਣਦਾ ਹੈ।
- ਇਹ ਉਸ callback ਨੂੰ Call Stack ਵਿੱਚ ਪੁਸ਼ (push) ਕਰਦਾ ਹੈ।
- Call Stack ਕੋਡ ਚਲਾਉਂਦਾ ਹੈ।
- ਇੱਕ ਵਾਰ ਜਦੋਂ callback ਖਤਮ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ engine microtask queue ਨੂੰ ਖਾਲੀ ਕਰ ਦਿੰਦਾ ਹੈ। ਇੱਥੇ ਹੀ Promises ਅਤੇ async/await ਹੁੰਦੇ ਹਨ।
- Event Loop ਅਗਲੇ ਫੇਜ਼ ਵੱਲ ਵਧਦਾ ਹੈ।
ਜੇਕਰ ਤੁਸੀਂ setTimeout(..., 0) ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ ਇਹ Timers ਫੇਜ਼ ਵਿੱਚ ਜਾਂਦਾ ਹੈ।
ਜੇਕਰ ਤੁਸੀਂ setImmediate(...) ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ ਇਹ Check ਫੇਜ਼ ਵਿੱਚ ਜਾਂਦਾ ਹੈ।
ਮੁੱਖ ਕੰਮ OS kernel ਅਤੇ libuv ਵਿੱਚ ਹੁੰਦਾ ਹੈ। Event Loop ਸਿਰਫ਼ JavaScript ਨੂੰ ਦੱਸਦਾ ਹੈ ਕਿ ਪ੍ਰਤੀਕਿਰਿਆ (react) ਕਰਨ ਦਾ ਸਮਾਂ ਕਦੋਂ ਹੈ।
ਸਰੋਤ: https://dev.to/joaovictor6/event-loop-entendendo-uma-das-bases-do-node-41a