nodejs有多线程吗?

Does nodejs have multithreading under the hood?

本文关键字:多线程 nodejs      更新时间:2023-09-26

我正在尝试本教程中的非阻塞代码示例:

var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});
console.log("Program Ended");

假设我有单处理器CPU。谁管理callback functionconsole.log()方法之间的CPU时间?Nodejs核心是否有线程管理器之类的东西?它是如何工作的?

虽然LibUV(在node.js中执行IO的库)肯定在后台使用了一个小线程池,但非阻塞IO本身并不使用线程来实现非阻塞。

简而言之,你告诉操作系统初始化一个非阻塞IO操作。操作系统与相关驱动程序通信,然后将流返回给应用程序。相关驱动程序自己操作,不使用线程模型。当IO完成时,驱动程序中断操作系统,然后通知你的应用程序IO已经完成。然后,应用程序将关联的回调从队列中取出并启动它。

整个机制不需要额外的线程。使用线程来并行化基于cpu的任务,使用异步IO来并行化基于IO的任务。执行IO的不是CPU,而是一个专门的硬件+驱动程序,因此不需要额外的线程。