让我先从一个着名的异步编程示例开始:
var fs = require('fs');
fs.readFile('./myhope', function(err, data){
//Doing something with my hope!
console.log('Dear world my hope is %s', data);
});
console.log('Help me nurture it');
哎呀但输出会要求你在告诉你之前帮助我培养我的希望。因为它是异步的。
我的问题是世界上谁正在读取文件并将其存储在缓冲区中,因为节点的唯一线程(它的单线程)正在忙于输出“帮助我培养它”!
是否就像那个节点给出了这样的指令'亲爱的O / S你能为我读这个文件吗?当你完成它之后只需调用那个回调!不要担心我的单线程循环会处理它'
答案 0 :(得分:4)
亲爱的O / S你可以为我阅读这个文件,当你完成它的时候 打电话给那个回调!
就是这样,基本上。 Async IO使用OS内核工具向IO注册回调。在IO运行时,根本没有使用线程。甚至不是后台主题。
回调在节点进程内部立即运行,并将工作项排入事件循环。