如何利用多核CPU的libuv线程在Node.js中工作

6

我无法确定 node.js 中的 libuv 是否使用多核 CPU,或者它是否在单个核心上运行所有线程并使用时间片切换?由于 node.js 是单线程的,但是 libuv 有自己的线程池,所以它是否使用多核 CPU 的所有内核?

2个回答

6

它通过线程池利用多核技术。例如,在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
一个 Node.js 服务器可以通过 Cluster 模块使用所有核心。否则,除非您将应用程序构建为多个进程,否则它将无法使用所有核心,这是一种常见的模式。

3
我明白,但是在更深层次的节点上,有一个使用POSIX线程的libuv线程池,理论上应该使用多个核心。因此我的问题是,这个libuv中的线程池是否使用了多核心。 - Praveen Pandey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接