我正在尝试此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 function
和console.log()
方法之间的CPU时间? Nodejs核心是否有类似线程管理器的东西?它是如何工作的?
答案 0 :(得分:6)
虽然LibUV(在node.js中执行IO的库)肯定会在后台使用一个小线程池,但非阻塞IO本身并不使用线程来阻塞。
简而言之,您告诉操作系统初始化非阻塞IO操作。操作系统与相关驱动程序通信,然后将流程返回给应用程序。相关驱动程序在不使用线程模型的情况下独立运行。当IO完成时,驱动程序会中断操作系统,操作系统会通知您的应用程序IO已完成。然后,您的应用程序将关联的回调出列并启动它。
整个机制不需要额外的线程。您使用线程并行化基于CPU的任务和异步IO以并行化基于IO的任务。 执行IO的不是CPU而是专用硬件+驱动程序,因此不需要额外的线程。