Node.js上性能繁重的算法

时间:2012-08-22 13:58:11

标签: javascript multithreading performance node.js socket.io

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

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

最后(但并非最不重要),如果while循环确实会阻止我的代码,那么在我的更新函数之间获得真正低delta时间的另一个解决方案是什么?我认为线程可以提供帮助,但我怀疑它们是可能的,我的Socket.io服务器和其他类需要以某种方式进行通信,而“其他类”我的意思是主World类,它有一个更新方法需要被调用并执行繁重的工作,以及我的服务器使用的getInfo方法。我觉得大多数时候程序只是坐在那里,等待间隔开火,浪费时间而不是做计算......

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

1 个答案:

答案 0 :(得分:7)

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

app.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
});

heavy.js

while (true) {
    if (Math.random() < 0.001) {
        process.send({ result: 'wow!' });
    }
}