【问题标题】:how libuv threads in nodejs utilize multi core cpunodejs中的libuv线程如何利用多核cpu
【发布时间】:2015-12-17 04:53:52
【问题描述】:

我无法确定 node.js 中的 libuv 是使用多核 CPU,还是仅使用时间片在单核上运行所有线程? 由于node.js是单线程的,而libuv有自己的线程池,那么它是否使用了多核cpu的所有核心?

【问题讨论】:

    标签: javascript node.js libuv


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,我明白这一点,但在更深层次的节点有 libuv 线程池,它使用 POSIX 线程,理论上应该使用多核。所以我的问题是libuv中的这个线程池是否使用多核。
      猜你喜欢
      • 2020-12-14
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多