我无法确定node.js中的libuv是使用多核cpus还是仅使用时间切片在单核上运行其所有线程? 由于node.js是单线程的,但libuv有自己的线程池,所以它是否使用多核cpu的所有内核?
答案 0 :(得分:3)
它确实通过线程池利用多核。例如,在Linux上,底层的pthread将为多个线程使用多个核心。
如果您运行以下代码,您将注意到4个(默认线程池大小)核心将固定为100%,因为文件系统IO正在与线程池一起运行。
var util = require('util');
var fs = require('fs');
for (var i = 0; i < 300000; i++) {
(function(id) {
fs.readdir('.', function() {
console.log(util.format('readdir %d finished.', id));
});
})(i);
}
答案 1 :(得分:-1)
Node.js服务器可以通过Cluster
模块使用所有核心。否则它不会,除非您将应用程序构建为多个进程,这是一种常见的模式。