𝗡𝗼𝗱𝗲.𝗷𝘀 𝗘𝘃𝗲𝗻𝘁 𝗟𝗼𝗼𝗽 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱 -> Node.js Event Loop ವಿವರಣೆ

Node.js ಒಂದೇ ಥ್ರೆಡ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಇದು ಏಕಕಾಲದಲ್ಲಿ ಸಾವಿರಾರು ವಿನಂತಿಗಳನ್ನು (requests) ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ನೀವು ಆಶ್ಚರ್ಯಪಡಬಹುದು.

ಇದರ ರಹಸ್ಯವೇ Event Loop.

ಒಂದು ಕೆಲಸ ಮುಗಿಯುವವರೆಗೆ ಕಾಯುವ ಬದಲು, Node.js ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುವ ಕೆಲಸಗಳನ್ನು ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ. ಇದು ಮುಂದಿನ ಕೆಲಸಕ್ಕೆ ಸಾಗುತ್ತಲೇ ಇರುತ್ತದೆ. ಇದು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ವೇಗವಾಗಿ ಮತ್ತು ಸ್ಪಂದನಶೀಲವಾಗಿ (responsive) ಮಾಡುತ್ತದೆ.

Blocking vs Non-blocking

ನೀವು readFileSync ನಂತಹ sync ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಬಳಸಿದರೆ, ಸರ್ವರ್ ನಿಂತುಹೋಗುತ್ತದೆ. ಫೈಲ್ ಓದುವಿಕೆ ಮುಗಿಯುವವರೆಗೆ ಅದು ಕಾಯುತ್ತದೆ. ಬೇರೆ ಯಾವುದೇ ಬಳಕೆದಾರರಿಗೆ ಪ್ರತಿಕ್ರಿಯೆ (response) ಸಿಗುವುದಿಲ್ಲ. ಇದು ನಿಮ್ಮ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು (performance) ಕುಂಠಿತಗೊಳಿಸುತ್ತದೆ.

ನೀವು fs.readFile ಬಳಸಿದರೆ, ಸರ್ವರ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಲೇ ಇರುತ್ತದೆ. ಫೈಲ್ ಹಿನ್ನೆಲೆಯಲ್ಲಿ (background) ಓದಲ್ಪಡುತ್ತಿರುವಾಗ ಅದು ಇತರ ವಿನಂತಿಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.

Event Loop ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ

ಈ ಲೂಪ್ ಹಲವಾರು ಹಂತಗಳ ಮೂಲಕ ಚಲಿಸುತ್ತದೆ:

• Timers: setTimeout ಮತ್ತು setInterval ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. • Pending Callbacks: ಸಿಸ್ಟಮ್ ಮಟ್ಟದ ದೋಷಗಳನ್ನು (errors) ನಿರ್ವಹಿಸುತ್ತದೆ. • Poll: ಹೊಸ ಕನೆಕ್ಷನ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ ಮತ್ತು ಡೇಟಾಬೇಸ್ ಕ್ವೇರಿಗಳಂತಹ I/O ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. • Check: setImmediate ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. • Close Callbacks: ಸಾಕೆಟ್ ಮುಚ್ಚುವಿಕೆಯನ್ನು (socket closures) ನಿರ್ವಹಿಸುತ್ತದೆ.

ಆದ್ಯತೆಯ ಕ್ರಮ (The Priority Order)

ಎಲ್ಲಾ ಕೆಲಸಗಳು ಸಮಾನವಾಗಿರುವುದಿಲ್ಲ. Node.js ಎರಡು ಕ್ಯೂಗಳನ್ನು (queues) ಬಳಸುತ್ತದೆ:

  1. Microtask Queue: ಇದು Promises ಅನ್ನು ಇರಿಸುತ್ತದೆ.
  2. Callback Queue: ಇದು setTimeout ಮತ್ತು I/O ಅನ್ನು ಇರಿಸುತ್ತದೆ.

Microtask Queue ಯಾವಾಗಲೂ ಮೊದಲು ಚಲಿಸುತ್ತದೆ. ನಿಮ್ಮ ಬಳಿ ಒಂದು Promise ಮತ್ತು ಒಂದು setTimeout ಇದ್ದರೆ, ಟೈಮರ್ ಮುಗಿಯುವ ಮೊದಲೇ Promise ಪೂರ್ಣಗೊಳ್ಳುತ್ತದೆ.

Call Stack ಮತ್ತು Queues

Call Stack ಪ್ರಸ್ತುತ ಯಾವ ಕೋಡ್ ಚಲಿಸುತ್ತಿದೆ ಎಂಬುದನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತದೆ. ಒಂದು ಕೆಲಸ ಮುಗಿದಾಗ, ಅದರ callback ಒಂದು ಕ್ಯೂಗೆ ಪ್ರವೇಶಿಸುತ್ತದೆ. Call Stack ಖಾಲಿಯಾಗುವವರೆಗೆ Event Loop ಕಾಯುತ್ತದೆ, ನಂತರ ಕ್ಯೂನಿಂದ ಕೆಲಸಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.

ಈ ತಪ್ಪುಗಳನ್ನು ತಪ್ಪಿಸಿ:

• ಅನಂತ ಲೂಪ್‌ಗಳನ್ನು (infinite loops) ಬಳಸಬೇಡಿ. ಇದು ನಿಮ್ಮ ಇಡೀ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸ್ಥಗಿತಗೊಳಿಸುತ್ತದೆ. • ಪ್ರೊಡಕ್ಷನ್‌ನಲ್ಲಿ (production) ಸಿಂಕ್ರೋನಸ್ ಫೈಲ್ ಮೆಥಡ್‌ಗಳನ್ನು ಬಳಸಬೇಡಿ. • ಮೇನ್ ಥ್ರೆಡ್‌ನಲ್ಲಿ (main thread) ಭಾರೀ ಗಣಿತದ ಅಥವಾ ವಿಡಿಯೋ ಪ್ರೊಸೆಸಿಂಗ್ ಕೆಲಸಗಳನ್ನು ಮಾಡಬೇಡಿ.

ಭಾರೀ ಕೆಲಸಗಳಿಗಾಗಿ, Worker Threads ಅಥವಾ background jobs ಬಳಸಿ.

ಸಾರಾಂಶ (Summary)

Node.js ವೇಗವಾಗಿದೆ ಏಕೆಂದರೆ ಅದು ಕಾಯುವುದಿಲ್ಲ. ಇದು I/O ಕೆಲಸಗಳನ್ನು ವಹಿಸುತ್ತದೆ ಮತ್ತು ಫಲಿತಾಂಶಗಳನ್ನು ನಿರ್ವಹಿಸಲು Event Loop ಅನ್ನು ಬಳಸುತ್ತದೆ. ಈ ಆರ್ಕಿಟೆಕ್ಚರ್ ಒಂದೇ ಥ್ರೆಡ್ ಮೂಲಕ ಅನೇಕ ಬಳಕೆದಾರರಿಗೆ ಸೇವೆ ನೀಡಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.

Event Loop ನ ಯಾವ ಭಾಗವನ್ನು ಕಲಿಯುವುದು ನಿಮಗೆ ಕಷ್ಟವಾಯಿತು? ಕಾಮೆಂಟ್‌ನಲ್ಲಿ ತಿಳಿಸಿ.

ಮೂಲ (Source): https://dev.to/synfinity-dynamics-pvt-ltd/nodejs-event-loop-explained-how-nodejs-handles-thousands-of-concurrent-requests-1heo