𝗡𝗼𝗱𝗲.𝗷𝘀 𝗘𝘃𝗲𝗻𝘁 𝗟𝗼𝗼𝗽 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱
Node.js একটি সিঙ্গেল থ্রেড ব্যবহার করে। আপনি হয়তো ভাবছেন এটি কীভাবে একসাথে হাজার হাজার রিকোয়েস্ট হ্যান্ডেল করে।
এর রহস্য হলো Event Loop।
কোনো একটি টাস্ক শেষ হওয়ার জন্য অপেক্ষা না করে, Node.js সময়সাপেক্ষ কাজগুলো অপারেটিং সিস্টেমের কাছে পাঠিয়ে দেয়। এটি পরবর্তী টাস্কে চলে যায়। এটি আপনার অ্যাপ্লিকেশনকে দ্রুত এবং রেসপন্সিভ করে তোলে।
Blocking বনাম Non-blocking
আপনি যদি readFileSync-এর মতো synchronous ফাংশন ব্যবহার করেন, তবে সার্ভার থেমে যায়। এটি ফাইল পড়া শেষ হওয়া পর্যন্ত অপেক্ষা করে। ফলে অন্য কোনো ব্যবহারকারী রেসপন্স পায় না। এটি আপনার পারফরম্যান্স নষ্ট করে দেয়।
আপনি যদি fs.readFile ব্যবহার করেন, তবে সার্ভার চলতে থাকে। ফাইলটি ব্যাকগ্রাউন্ডে পড়া হওয়ার সময় এটি অন্যান্য রিকোয়েস্ট হ্যান্ডেল করতে পারে।
Event Loop কীভাবে কাজ করে
লুপটি কয়েকটি ধাপের মধ্য দিয়ে যায়:
• Timers: setTimeout এবং setInterval হ্যান্ডেল করে।
• Pending Callbacks: সিস্টেম লেভেলের এররগুলো হ্যান্ডেল করে।
• Poll: নতুন কানেকশন গ্রহণ করে এবং ডাটাবেস কুয়েরির মতো I/O হ্যান্ডেল করে।
• Check: setImmediate হ্যান্ডেল করে।
• Close Callbacks: সকেট ক্লোজার হ্যান্ডেল করে।
The Priority Order
সব টাস্ক সমান নয়। Node.js দুটি কিউ (queue) ব্যবহার করে:
- Microtask Queue: এটি Promises ধারণ করে।
- Callback Queue: এটি
setTimeoutএবং I/O ধারণ করে।
Microtask Queue সবসময় আগে চলে। আপনার যদি একটি Promise এবং একটি setTimeout থাকে, তবে টাইমারের আগেই Promise সম্পন্ন হবে।
The Call Stack and Queues
Call Stack ট্র্যাক করে যে বর্তমানে কোন কোডটি চলছে। যখন একটি টাস্ক শেষ হয়, তখন তার কলব্যাক একটি কিউতে প্রবেশ করে। Call Stack খালি না হওয়া পর্যন্ত Event Loop কিউ থেকে টাস্ক নিতে অপেক্ষা করে।
Avoid these mistakes:
• ইনফিনিট লুপ (infinite loops) ব্যবহার করবেন না। এটি আপনার পুরো অ্যাপকে ফ্রিজ করে দিতে পারে। • প্রোডাকশনে synchronous ফাইল মেথড ব্যবহার করবেন না। • মেইন থ্রেডে ভারী গণিত বা ভিডিও প্রসেসিং করবেন না।
ভারী কাজের জন্য Worker Threads বা ব্যাকগ্রাউন্ড জব ব্যবহার করুন।
Summary
Node.js দ্রুত কারণ এটি অপেক্ষা করে না। এটি I/O টাস্কগুলো ডেলিগেট করে এবং ফলাফল ম্যানেজ করার জন্য Event Loop ব্যবহার করে। এই আর্কিটেকচার একটি মাত্র থ্রেডকে অনেক ব্যবহারকারীকে সার্ভিস দিতে সাহায্য করে।
Event Loop-এর কোন অংশটি আপনার শেখা সবচেয়ে কঠিন ছিল? কমেন্টে আমাকে জানান।