আপডেট: নোড 0.6 দিয়ে শুরু করা এই পোস্টটি অপ্রচলিত, যেহেতু স্টাডাউট এখন সিঙ্ক্রোনাস ।
আচ্ছা আসুন দেখি console.log
আসলে কি হয়।
সবার আগে এটি কনসোল মডিউলটির অংশ :
exports.log = function() {
process.stdout.write(format.apply(this, arguments) + '\n');
};
সুতরাং এটি কেবল কিছু ফর্ম্যাটিং করে এবং process.stdout
এ পর্যন্ত অ্যাসিক্রোনাস কিছুই লিখেনি।
process.stdout
একটি সংগ্রহকারী হয় প্রারম্ভকালে সংজ্ঞায়িত যা প্রখর রৌদ্রে সক্রিয়া করা হয়, আমি কিছু ব্যাখ্যা করার কিছু মন্তব্য জুড়েছেন:
.... code here...
process.__defineGetter__('stdout', function() {
if (stdout) return stdout;
if (binding.isatty(fd)) {
stdout = new tty.WriteStream(fd);
} else if (binding.isStdoutBlocking()) {
stdout = new fs.WriteStream(null, {fd: fd});
} else {
stdout = new net.Stream(fd);
stdout.readable = false;
}
return stdout;
});
টিটিওয়াই এবং ইউনিক্সের ক্ষেত্রে আমরা এখানেই শেষ করি , এই জিনিসটি সকেট থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। সুতরাং যে সমস্ত নোডটি মূলত করে তা হ'ল ডেটাটি সকেটের দিকে ধাক্কা দেওয়া, তারপরে টার্মিনালটি বাকীগুলির যত্ন নেয়।
আসুন এটি পরীক্ষা!
var data = '111111111111111111111111111111111111111111111111111';
for(var i = 0, l = 12; i < l; i++) {
data += data;
}
var start = Date.now();
console.log(data);
console.log('wrote %d bytes in %dms', data.length, Date.now() - start);
ফলাফল
....a lot of ones....1111111111111111
wrote 208896 bytes in 17ms
real 0m0.969s
user 0m0.068s
sys 0m0.012s
সকেটগুলির সামগ্রী মুদ্রণ করতে টার্মিনালের প্রায় 1 সেকেন্ডের প্রয়োজন হয়, তবে নোডটিকে টার্মিনালে ডেটা ঠেকাতে কেবল 17 মিলিসেকেন্ডের প্রয়োজন।
একই স্ট্রিম কেসের ক্ষেত্রেও যায় এবং ফাইল কেসটি হ্যান্ডেল অ্যাসিনক্রোনাস হয় ।
সুতরাং হ্যাঁ নোড.জেস এর অ-অবরুদ্ধ প্রতিশ্রুতিগুলির প্রতি সত্য।