Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 异步编程-这很好,但是谁做的?_Node.js_Asynchronous - Fatal编程技术网

Node.js 异步编程-这很好,但是谁做的?

Node.js 异步编程-这很好,但是谁做的?,node.js,asynchronous,Node.js,Asynchronous,让我从一个著名的异步编程示例开始: 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'); 哎哟,但输出将要求您在告诉您之前帮助我培养我的希望。因为它是异步的。 我的问题是

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

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,你能帮我读一下这个文件吗?当你读完后,就调用这个回调!”!。别担心,我的单线程循环会处理它的

亲爱的O/S你能帮我读一下这个文件吗?你什么时候读的 打回电话

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

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

亲爱的O/S你能帮我读一下这个文件吗?你什么时候读的 打回电话

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


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

谢谢!谢谢你的回信!我没有足够的声誉为你做+1。所以,请原谅我。顺便说一句,AMD也有同样的理念。我的意思是,当requireJs加载AMD模块时,她会让一些内核加载它们,而这不会阻塞。但我不明白为什么在这张图片中模块重叠,你的类比是正确的。正在进行的IO只是一个数据结构,一直到硬件接口。硬件使用一个中断(硬件设施)回调内核。AMD也是如此,只是逻辑调用堆栈更长。谢谢!谢谢你的回信!我没有足够的声誉为你做+1。所以,请原谅我。顺便说一句,AMD也有同样的理念。我的意思是,当requireJs加载AMD模块时,她会让一些内核加载它们,而这不会阻塞。但我不明白为什么在这张图片中模块重叠,你的类比是正确的。正在进行的IO只是一个数据结构,一直到硬件接口。硬件使用一个中断(硬件设施)回调内核。AMD也是如此,只是逻辑调用堆栈要长得多。