event loop হল একটি প্রক্রিয়া যা একক-থ্রেডেড Node.js-কে non-blocking I/O সম্পাদন করতে সক্ষম করে। এটি ক্রমাগত callbacks-এর একটি কিউ প্রক্রিয়া করে: যখন আপনার JavaScript একটি থ্রেডে চলে, I/O অপারেশনগুলি অফলোড করা হয় এবং তাদের callbacks সম্পন্ন হলে লুপ দ্বারা চালানো হয়।
লুপের পর্যায়গুলি
প্রতিটি পুনরাবৃত্তিতে ("tick") ক্রমান্বয়ে পর্যায়গুলির মধ্য দিয়ে যায়, প্রতিটির নিজস্ব callback কিউ রয়েছে:
┌───────────────────────────┐
┌─>│ timers (setTimeout) │ ← expired timer callbacks
│ ├───────────────────────────┤
│ │ pending I/O callbacks │
│ ├───────────────────────────┤
│ │ poll (I/O events) │ ← retrieve new I/O; execute their callbacks
│ ├───────────────────────────┤
│ │ check (setImmediate) │
│ ├───────────────────────────┤
└──│ close callbacks │
└───────────────────────────┘
Microtasks পর্যায়গুলির মধ্যে চলে (উচ্চ অগ্রাধিকার)
console.log("1"); // sync
setTimeout(() => console.log("2"), 0); // timers phase (macrotask)
setImmediate(() => console.log("3")); // check phase
Promise.resolve().then(() => console.log("4")); // microtask
process.nextTick(() => console.log("5")); // nextTick — highest priority
console.log("6");
// Output: 1, 6, 5, 4, 2/3 (timer vs immediate order can vary)
প্রতিটি পর্যায়ের পরে (এবং sync কোডের পরে), Node microtasks নিঃশেষ করে: প্রথমে process.nextTick callbacks, তারপর Promise callbacks — তারপর এগিয়ে যায়। এই কারণেই একটি resolved Promise setTimeout(…, 0) এর আগে চলে।
এটি কীভাবে থ্রেড ছাড়াই সমসাময়িকতা সক্ষম করে
A DB query or file read is handed to the OS/thread pool → Node keeps running
other code → when the result is ready, its callback is queued → the loop runs it.
One thread, thousands of in-flight operations.
মূল নিয়ম: লুপকে ব্লক করবেন না
// ❌ a long synchronous loop freezes EVERYTHING — no other callback can run
while (Date.now() - start < 5000) {}
একক থ্রেড ব্লক করা সমস্ত অনুরোধ পরিচালনা বন্ধ করে। CPU-ভারী কাজ worker threads-এ অফলোড করুন।
এটি কেন গুরুত্বপূর্ণ
event loop হল Node-এর পারফরম্যান্স মডেলের হৃদয় — এর পর্যায়গুলি এবং microtask অগ্রাধিকার বোঝা async ক্রমটি ব্যাখ্যা করে, কেন Node একটি থ্রেডে বিশাল সমসাময়িকতা পরিচালনা করে এবং এটি কখনও ব্লক না করার সমালোচনামূলক নিয়ম।
সঠিক এবং কার্যকর Node কোড লিখতে এবং অবাক করা async সম্পাদনের ক্রম debug করতে এটি মৌলিক।
