nodejs在引擎盖下有多线程吗?

时间:2016-08-23 09:59:55

标签: javascript node.js multithreading

我正在尝试此tutorial

中的非阻止代码示例
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核心是否有类似线程管理器的东西?它是如何工作的?

1 个答案:

答案 0 :(得分:6)

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

简而言之,您告诉操作系统初始化非阻塞IO操作。操作系统与相关驱动程序通信,然后将流程返回给应用程序。相关驱动程序在不使用线程模型的情况下独立运行。当IO完成时,驱动程序会中断操作系统,操作系统会通知您的应用程序IO已完成。然后,您的应用程序将关联的回调出列并启动它。

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