2

让我从一个著名的异步编程示例开始:

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你能为我阅读这个文件吗?当你完成它时,只需调用那个回调!。别担心我的单线程循环会处理它'

4

1 回答 1

4

亲爱的 O/S 你能帮我读一下这个文件吗?当你读完之后就调用那个回调!

基本上就是这样。异步 IO 使用操作系统内核工具向 IO 注册回调。当 IO 运行时,根本没有线程在使用。甚至没有后台线程。

回调立即在节点进程内部运行,并将工作项排队到事件循环中。

于 2013-08-04T09:29:57.880 回答