我无法确定 node.js 中的 libuv 是否使用多核 CPU,或者它是否在单个核心上运行所有线程并使用时间片切换?由于 node.js 是单线程的,但是 libuv 有自己的线程池,所以它是否使用多核 CPU 的所有内核?
我无法确定 node.js 中的 libuv 是否使用多核 CPU,或者它是否在单个核心上运行所有线程并使用时间片切换?由于 node.js 是单线程的,但是 libuv 有自己的线程池,所以它是否使用多核 CPU 的所有内核?
它通过线程池利用多核技术。例如,在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);
}
Cluster
模块使用所有核心。否则,除非您将应用程序构建为多个进程,否则它将无法使用所有核心,这是一种常见的模式。