对于下面的代码,
var fs = require('fs');
fs.watch('target.txt', function(event, fileName){
console.log('Event: ' + event + ', for file: ' + fileName);
});
Console.log('Now watching target.txt');
按照下面的架构,
1) fs.watch()
将调用 libuv
。 libuv
将启动一个线程来跟踪 target.txt
上的 change
事件。 libuv
的结果将转到 v8
,然后以带有数据缓冲区的回调形式再次通过 NodeJS Bindings
。
2) libuv
在事件队列中添加change
事件。当事件循环选择 change
事件时,相应的回调将在 v8
运行时执行。
我的理解正确吗?
最佳答案
不对,你误会了。 NodeJS 没有线程,它是单线程的,使用 Observer Pattern .事件循环等待事件发生(观察一个事件)。当事件发生时,它会调用它的处理程序。多线程方法的错觉来自于 Node 经常使用异步事件,定义在给定任务完成时执行的回调函数。阅读更多 here .
关于javascript - NodeJS 事件循环是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051076/