নন-ব্লকিং I/O: Node.js এর উচ্চ কর্মদক্ষতার রহস্য

· 4 likes
নন-ব্লকিং I/O: Node.js এর উচ্চ কর্মদক্ষতার রহস্য


## নন-ব্লকিং I/O কি?

নন-ব্লকিং I/O হলো এমন একটি প্রক্রিয়া যা অ্যাপ্লিকেশনকে কোনো I/O অপারেশনের জন্য অপেক্ষা না করে কাজ চালিয়ে যেতে দেয়। সাধারণত, কোনো I/O (ইনপুট/আউটপুট) অপারেশন যেমন ফাইল পড়া, ডাটাবেস থেকে ডেটা আনা, বা API কল করার জন্য অপেক্ষা করতে হয়। কিন্তু নন-ব্লকিং I/O পদ্ধতিতে এসব অপারেশনের জন্য অপেক্ষা করার পরিবর্তে, কাজটি ব্যাকগ্রাউন্ডে সম্পন্ন হয় এবং যখন কাজটি সম্পন্ন হয় তখন একটি callback বা event-driven পদ্ধতির মাধ্যমে ফলাফল পাওয়া যায়।

## Node.js-এ নন-ব্লকিং I/O

Node.js হলো একটি event-driven, non-blocking I/O মডেল ব্যবহারকারী জাভাস্ক্রিপ্ট রানটাইম। এখানে সব I/O অপারেশন (যেমন ডাটাবেস অ্যাক্সেস, ফাইল সিস্টেম অ্যাক্সেস, নেটওয়ার্ক অনুরোধ) নন-ব্লকিং পদ্ধতিতে কাজ করে। এর মানে হলো, Node.js কোনো I/O কাজ শুরু করার পর, অন্য কাজ সম্পাদন করতে থাকে এবং I/O কাজ সম্পন্ন হলে নির্দিষ্ট callback বা promise দিয়ে সে কাজের রেসপন্স পায়।

উদাহরণ:
const fs = require('fs');

// একটি ফাইল পড়া - নন-ব্লকিং পদ্ধতি
fs.readFile('test.txt', 'utf-8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
return;
}
console.log('File content:', data);
});

console.log('This will run first, before file reading is complete.');


এই উদাহরণে, `fs.readFile()` ফাংশনটি নন-ব্লকিং পদ্ধতিতে কাজ করে। ফাইল পড়ার কাজটি শুরু হয়, কিন্তু Node.js ফাইলটি পুরোপুরি পড়া শেষ হওয়ার আগেই `console.log('This will run first')` মেসেজটি প্রদর্শন করে। যখন ফাইলটি পড়া শেষ হয়, তখন callback ফাংশনটি চালু হয় এবং ফাইলের কন্টেন্ট প্রিন্ট হয়।


## নন-ব্লকিং I/O এর সুবিধা

১. উচ্চ কর্মদক্ষতা: নন-ব্লকিং I/O এর মাধ্যমে Node.js একই সাথে একাধিক কাজ সম্পন্ন করতে পারে, যার ফলে সার্ভারের পারফরমেন্স বৃদ্ধি পায়।

২. স্কেলেবিলিটি: নন-ব্লকিং I/O-এর ফলে অল্প রিসোর্স ব্যবহার করে অনেক বেশি রিকোয়েস্ট হ্যান্ডেল করা সম্ভব।

৩. কম্পিউটেশনাল ওভারহেড কমানো: I/O কাজগুলো ব্যাকগ্রাউন্ডে চলতে থাকলে, CPU অন্যান্য কাজ করতে পারে, ফলে সার্ভারের লোড কম হয়।

## ইভেন্ট লুপ এবং কলব্যাক

Node.js-এর মূলমন্ত্র হলো এর ইভেন্ট লুপ। ইভেন্ট লুপ সার্ভারকে নন-ব্লকিং পদ্ধতিতে কাজ করতে দেয়। যখন একটি I/O কাজ শুরু হয়, তা ইভেন্ট লুপে অপেক্ষা করে। কাজটি শেষ হলে ইভেন্ট লুপ callback ফাংশনকে ডাকে এবং মূল প্রোগ্রাম আবার চালু হয়।

### ইভেন্ট লুপের ধাপগুলো:
১. Timers: এখানে `setTimeout` এবং `setInterval` এর মতো টাইমার ফাংশনগুলো কাজ করে।
২. Pending Callbacks: পেন্ডিং কলে থাকা কলব্যাকগুলো এখানে সম্পন্ন হয়।
৩. Poll: I/O কাজগুলো এখানে থাকে, যতক্ষণ না সেগুলো সম্পন্ন হয়।
৪. Check:`setImmediate()` দ্বারা ডাকা কলব্যাকগুলো এখানে কাজ করে।


Node.js এর নন-ব্লকিং I/O মডেল এটি অ্যাসিঙ্ক্রোনাস পদ্ধতিতে উচ্চ কার্যক্ষমতা এবং স্কেলেবিলিটি নিশ্চিত করে। এই মডেল অ্যাপ্লিকেশনকে একাধিক কাজ সমান্তরালে চালানোর সুযোগ দেয়, ফলে সার্ভারের লোড কমে এবং দ্রুত ফলাফল পাওয়া যায়।

GitHub
LinkedIn