বেশিরভাগ সফটওয়্যার সিস্টেমে যেকোনো রকম সিস্টেম কল যেমন - ফাইল অপারেশন, ডাটাবেজ কুয়েরী এসব ব্লকিং অর্থাৎ এরকম অপারেশন চলা অবস্থায় মুল প্রোগ্রামের এক্সিকিউশন বন্ধ থাকে যতক্ষণ না পর্যন্ত ওই কলের অপর প্রান্তের কাজ শেষ হয় এবং একটা রেজাল্ট রিটার্ন হয়। অর্থাৎ একটা ভ্যারিয়েবল ডিক্লেয়ার করলেন এবং তার ডান পাশে একটা ফাংশন কল করলেন এবং ফাংশনটি অপর পাশে সিস্টেমের সাথে নানা রকম কাজ করে একটা ভ্যালু রিটার্ন করে। তো যতক্ষণ পর্যন্ত না ওই ফাংশনের ভ্যালু এই ভ্যারিয়েবলে এসে জমা হয় ততক্ষণ পর্যন্ত প্রোগ্রাম পরবর্তী স্টেটমেন্ট গুলো এক্সিকিউট করার সুযোগই পাবে না। এটাকে বলতে পারেন ব্লকিং এবং synchronous প্রোগ্রামিং। Node.js এর একটা অন্যতম উদ্দেশ্য হচ্ছে যতটা সম্ভব নন-ব্লকিং I/O অপারেশন ইউটিলাইজ করা। এর জন্য সে ইভেন্ট লুপ এবং আলাদা থ্রেড পুল ব্যবহার করে। যদিও Node.js রানটাইম নিজে সিঙ্গেল থ্রেডেড। এগুলো আমরা একটু পড়েই আলোচনা করবো। তার আগে তাহলে থ্রেডিং বিষয়টা একটু ঘুরে যাই।