内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
在JavaScript中,Array.forEach
是异步运行的吗?假设我调用以下代码:
[many many elements].forEach(function () {lots of work to do})
这会是非阻塞的吗?
有一种常见的模式,用于在Node中进行非常繁重的计算
节点是单线程的(请参见Node.js);这意味着它只能使用单个核心。现代的盒子有8个,16个甚至更多的核心,所以这会使90%以上的机器闲置。REST服务的常见模式是将一个节点进程启动,并将其放到本地负载均衡器(http://nginx.org/)
另一种常见的模式,那就是放弃通过子进程来完成繁重的任务。好处是,子进程可以在后台进行大量计算,而你的父进程可以响应其他事件。问题是你不能/不应该与这个子进程共享内存;并且你必须传递信息。如果你的输入和输出数据的大小与必须执行的计算相比较,这将非常有效。甚至可以启动子node.js进程和使用之前使用的相同代码。
例如:
var child_process = require('child_process'); function run_in_child(array, cb) { var process = child_process.exec('node libfn.js', function(err, stdout, stderr) { var output = JSON.parse(stdout); cb(err, output); }); process.stdin.write(JSON.stringify(array), 'utf8'); process.stdin.end(); }