nodejs中的libuv线程如何利用多核cpu

Pra*_*dey 5 javascript node.js libuv

我无法确定node.js中的libuv是使用多核cpus还是仅使用时间切片在单核上运行其所有线程?由于node.js是单线程的,但libuv有自己的线程池,所以它是否使用多核cpu的所有内核?

小智 5

它确实通过线程池利用了多核。例如,在 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);
}
Run Code Online (Sandbox Code Playgroud)


Jas*_*say -1

Node.js 服务器可以通过该Cluster模块使用所有核心。否则它不会,除非您将应用程序构建为多个进程(这是常见的模式)。

  • 是的,我理解这一点,但在节点的更深层次上,有 libuv 线程池,它使用 POSIX 线程,理论上应该使用多重核心。所以我的问题是 libuv 中的线程池是否使用多核。 (3认同)