【发布时间】:2015-12-17 04:53:52
【问题描述】:
我无法确定 node.js 中的 libuv 是使用多核 CPU,还是仅使用时间片在单核上运行所有线程? 由于node.js是单线程的,而libuv有自己的线程池,那么它是否使用了多核cpu的所有核心?
【问题讨论】:
标签: javascript node.js libuv
我无法确定 node.js 中的 libuv 是使用多核 CPU,还是仅使用时间片在单核上运行所有线程? 由于node.js是单线程的,而libuv有自己的线程池,那么它是否使用了多核cpu的所有核心?
【问题讨论】:
标签: javascript node.js libuv
它确实通过线程池利用了多核。例如,在 Linux 上,底层 pthreads 将为多个线程使用多个内核。
如果您运行以下代码,您会注意到 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);
}
【讨论】:
Node.js 服务器可以通过 Cluster 模块使用所有内核。否则不会,除非您将应用程序构建为常见模式的多个进程。
【讨论】: