Javascript是单线程的。因此,我编写的每一段代码都在Node提供的javascript运行时的单个线程中执行。所以当我执行以下代码时:
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("Asynchronous read: " + data.toString());
});
// Synchronous read
var data = fs.readFileSync('input.txt');
以下是我对工作流程的理解,如果我错了,请纠正我:
fs.readFile
立即被Node中的 manager 从调用堆栈中弹出,然后移动到其他线程开始读取内容。
阅读完成后,节点中的管理员:
fs.readFile
的回调函数放入队列堆栈 fs.readFileSync
不会从堆栈中弹出,而是像运行其他函数一样在运行时线程中执行。
那么,节点中的管理器是谁,它在其他线程中执行Node API I / O函数并管理它们的调用堆栈。
Node是否使用多核在后台执行它的API函数?
答案 0 :(得分:2)
NodeJS正在使用事件循环进行异步操作。
如果您知道,有一个名为 libuv 的库。 libuv负责异步代码执行。这是一个小伪代码如何管理它:
while there are still events to process:
e = get the next event
if there is a callback associated with e:
call the callback
您可以在此处详细了解libuv - http://nikhilm.github.io/uvbook/introduction.html
所以,基本上:
Node.js API函数是否在不同的线程中执行?
两者,是,不。如果函数可以将I / O操作移动到线程池中的单独线程,则是。否则它在同一个线程中执行。
那么,谁是节点中的经理谁在其他线程中执行Node API I / O函数并管理他们的调用堆栈?
libuv - https://github.com/libuv/libuv
Node是否使用多核在后台执行它的API函数?
我不确定,如果我错了,任何人都可以纠正我,但Node是在单核内执行的。如果要运行多核支持,则需要在集群模式下运行它。
答案 1 :(得分:0)