3

我正在创建一些性能非常高的算法,例如进化和人工智能。对我来说重要的是我的更新函数经常被调用(精度),我只是不能setInterval以每毫秒一次的速度更快地更新。

最初我只想使用一个 while 循环,但我不确定这些类型的阻塞循环在 Node.js 环境中是否是一个可行的解决方案。如果我遇到“无限”循环,Socket.io 的 socket.on("id", cb) 会工作吗?我的代码是否需要以某种方式返回到 Node.js 以让它检查所有事件,还是自动完成?

最后(但并非最不重要),如果 while 循环确实会阻塞我的代码,那么在我的更新函数之间获得非常低的增量时间的另一种解决方案是什么?我认为线程可能会有所帮助,但我怀疑它们是否可行,我的 Socket.io 服务器和其他类需要以某种方式进行通信,而“其他类”是指主World类,它有一个需要调用的更新方法并完成繁重的工作,以及getInfo我的服务器使用的方法。我觉得大部分时间程序只是坐在那里,等待间隔触发,浪费时间而不是进行计算......

另外,我想知道 Node.js 是否适合这类任务。

4

1 回答 1

8

您可以使用child_process.fork在单独的线程中执行 havy 算法,并通过在主线程中等待结果child.on('message', function (message) { });

应用程序.js

var child_process = require('child_process');
var child = child_process.fork('./heavy.js', [ 'some', 'argv', 'params' ]);
child.on('message', function(message) {
     // heavy results here
});

沉重的.js

while (true) {
    if (Math.random() < 0.001) {
        process.send({ result: 'wow!' });
    }
}
于 2012-08-22T14:56:27.963 回答