multithreading - 以 Node Js 方式创建工作队列的正确方法?

标签 multithreading node.js

考虑经典的工作队列:您有一个主线程,它从某个地方(通常是数据库或某个远程系统)获取信息。数据通常存储在共享数组中。有 N 个工作线程 -> 线程从数组中获取一个元素,对其进行处理,然后获取第二个元素。如果队列为空,他们只需等待它获取一些信息。

在大多数语言中,例如 C++、Python、Java,这将通过线程完成。由于 NodeJs 是异步的,我想知道以下是否会产生类似的效果:

var arr = [21, 22, 23];
arr.forEach(function(entry) {
    //do something time/processor consuming 
});

注意:这通常是某个必须向数据库或某个远程系统发送请求的对象。

据我了解,每个数组条目应该调用 1 个闭包,并且将在不等待前一个闭包完成的情况下调用闭包。换句话说,所有数组条目的工作几乎同时开始。是这样吗 ?如果不是, Node 执行工作队列的方式是什么?

编辑:我并不是在寻找确切的工作队列,而是在寻找适合 Node 范例的类似的东西。

最佳答案

“我想知道以下内容是否会产生类似的效果”
答案是:不会。

Node.js 在单线程上运行:is Array.forEach asynchronous?

如果您的“消耗时间/处理器的东西”是对数据库的异步查询或其他类型的异步 I/O,则 native Array.forEach 就可以了。

如果您需要某种并行,另请参阅此相关问题:Async foreach in nodejs

但是,如果您的脚本需要 CPU 级并行性...您可以在这里找到一些讨论:Multi-threaded Node.js
Node.js 不适合多线程,但您可以 fork 并使用一些进程间通信 API:

关于multithreading - 以 Node Js 方式创建工作队列的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24713429/

相关文章:

将 void* 转换为 long*

c++ - std::thread(可分离)和异常安全

node.js - 有什么办法可以从 Nuxt+Node 项目中生成可执行文件 (.exe) 吗?

android - 载入画面介绍

java - 从 asynctask 获取结果并处理它

node.js - ng update --all 说 'Repository is not clean' 即使 git commit

node.js - grpc 微服务的单元和 e2e 测试

node.js - 如何在 Apple Silicon M1 上原生安装 NodeJS?

javascript - locomotive.js 监听http和https

c++ - Jade 米片 C++ : Thread Fork to create data structures