我将以示例解释我的问题。
fs.readFile('somefilename', function(err, data) {
...doSomething...
});
执行此行代码时,readFile
将开始读取该文件。成功或失败时,此回调将被推送到队列中以便使用适当的参数执行。
正在读取文件asynchronously
,但是如果NodeJS是单线程的,非阻塞的,那么谁在做呢?
答案 0 :(得分:4)
用户代码在单个线程中执行。然而,在幕后,nodejs使用libuv / libio来处理任何使用线程的io。
https://github.com/libuv/libuv
有趣的帖子:
How the single threaded non blocking IO model works in Node.js
Does node.js use threads/thread pool internally?
Why is Node.js single threaded?
答案 1 :(得分:0)
我会自己向你解释一下,但这个video可以更好地解释Javascript事件循环。
答案 2 :(得分:0)
Node.js是一个事件驱动的服务器。它并不意味着它使用多线程。
由于事件驱动,Node.js可以同时处理多个请求。基本上,当它收到请求时,Node.js会启动它的执行。在执行时,Node.js接收另一个请求,它将启动它的执行。等等。当第一个请求完成并且结果可用时,它会触发一个事件,通知Node.js此请求已完成,然后Node.js发回请求结果。
可以在Node.js website上找到更多信息,更多信息可以在here找到。