【问题标题】:How do I know I've hit the threads limit defined in Node?我怎么知道我已经达到了 Node 中定义的线程限制?
【发布时间】:2019-06-10 06:34:24
【问题描述】:

我已将线程池的大小限制为 25。

process.env.UV_THREADPOOL_SIZE = 25;

如何知道所有线程在运行时都已耗尽?

有什么办法可以发现所有define线程都用完了 新请求?

我正在使用 Node.js (NAN) 的本机抽象来调用 C++ 函数。对于 C++ Nan::AsyncQueueWorker 的每个请求都会创建。这里我想查找线程限制是否用完,然后添加一个安全系数。

【问题讨论】:

  • 您想知道是否所有线程都在“忙”做某项任务?
  • @Sid 是,如果它很忙或卡住了
  • @Sid 你能帮忙吗?
  • 老实说,我现在不知道该怎么做,但我一有时间就会研究 libuv,只是为了好玩 :) 当然我会与社区。​​span>

标签: javascript node.js multithreading c++11 threadpool


【解决方案1】:

您是在寻找 nan 还是 js 的实现?

在南 impl:

您必须手动完成。维护一个映射,其中 key 为 int,value 为 workAsyn。在每次调用时推送并在 workAsyn 完成时删除。对每个请求执行此操作。

将地图的大小与定义的线程限制进行比较。

【讨论】:

    【解决方案2】:

    我分析了nanlibuv 来源。不幸的是,现在没有办法获得使用的线程数。如果只是自己添加此功能。

    【讨论】:

      【解决方案3】:

      看起来这个cluster 模块可能会有所帮助...

       var cluster = require('../')
          ,http = require('http');
      
       var server = http.createServer(function(req, res){
         res.writeHead(200);
         res.end('Hello World');
       });
      
       var workerCount = 0;
      
       cluster(server)
         .listen(3000)
         .on('worker',()=> {
           workerCount++;
           console.log('workerCount',workerCount)
         })
         .on('worker killed',()=> { 
           workerCount--; 
           console.log('workerCount',workerCount)
         })
      

      似乎还可以使用 REPL“telnet”插件直接从 master 访问工人数...

      http://learnboost.github.io/cluster/docs/stats.html

      Docs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 2011-10-09
        • 2016-09-28
        • 1970-01-01
        相关资源
        最近更新 更多