【问题标题】:How to make use of multiple threads in NodeJs? [closed]如何在 NodeJs 中使用多个线程? [关闭]
【发布时间】:2020-09-12 03:08:21
【问题描述】:

我正在使用 NodeJs 构建一个应用程序,在一个特定的功能中,我需要对 MongoDB 中的近 4000 个文档进行聚合和更新。我利用 Promise 来实现并发,因为每个 Promise 都会进行聚合然后更新。我的问题是每个承诺只在一个线程上运行。是否可以利用集群,让每个核心在其中运行 1000 个承诺? 我是这种聚类技术的新手。因此,任何有关它的基本建议将不胜感激。

【问题讨论】:

    标签: node.js mongodb cluster-computing


    【解决方案1】:

    pm2 非常适合集群,因为它在引擎盖下做同样的事情,也许看看 https://pm2.keymetrics.io/docs/usage/cluster-mode/ 这篇文章也提供了一个简短的介绍 https://medium.com/tech-tajawal/clustering-in-nodejs-utilizing-multiple-processor-cores-75d78aeb0f4f

    【讨论】:

    • 这个选项是创建一个进程而不是一个线程。
    【解决方案2】:
    【解决方案3】:

    您可以使用 worker_thread 模块在 Node.js 中创建线程。
    每个工作线程实例实际上都是事件循环的新实例。创建一个新的工作线程有效地提供了一个新的事件循环。

    const { Worker, isMainThread, parentPort } = require('worker_threads');
    
    if (isMainThread) {
        console.log('Starting the main thread');
    
        const worker = new Worker(__filename);
    
        worker.on('message', (msg) => {
            console.log(`Worker: ${msg}`);
        });
    
        console.log('Still in main thread');
    } else {
        parentPort.postMessage('Getting started');
    
        wasteTime();
    
        parentPort.postMessage('In the middle');
    
        wasteTime();
    
        parentPort.postMessage('All done');
    
    }
    
    function wasteTime() {
        const end = Date.now() + 3000;
        while (Date.now() < end) { }
    }
    
    

    注意:Worker(线程)对于执行 CPU 密集型 JavaScript 操作很有用。它们对 I/O 密集型工作没有多大帮助。 Node.js 内置的异步 I/O 操作比 Workers 效率更高。

    https://medium.com/@pprathameshmore/is-it-really-node-js-single-threaded-threading-in-node-js-227177c42d5a

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      相关资源
      最近更新 更多