NodeJS事件循环如何工作?
对于下面的代码,
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
的结果将通过带有数据缓冲区的callbackforms通过NodeJS Bindings
进入v8
。
2) libuv
在事件队列中添加change
事件。 当事件循环selectchange
事件时,在v8
运行时执行相应的callback。
我的理解是正确的吗?
不,你误解了。 NodeJS没有线程,而是使用Observer模式的单线程。 事件循环等待事件发生(观察事件)。 当一个事件发生时,它会调用它的处理程序。 multithreading方法的错觉来自于Node经常使用asynchronous事件,定义在给定任务完成时要执行的callback函数。 在这里阅读更多。