考虑经典的工作队列:您有一个主线程,它从某个地方(通常是数据库或某个远程系统)获取信息。数据通常存储在共享数组中。有 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/