我正在创建一些性能非常高的算法,例如:进化和人工智能。对我来说重要的是我的更新函数经常被调用(精度),而我只是不能让setInterval
更新速度超过每毫秒一次。
最初我想使用while循环,但我不确定那些阻塞循环是Node.js环境中可行的解决方案。如果我遇到“无限”循环,Socket.io的socket.on(“id”,cb)会起作用吗?我的代码是否需要返回Node.js以检查所有事件,还是自动完成?
最后(但并非最不重要),如果while循环确实会阻止我的代码,那么在我的更新函数之间获得真正低delta时间的另一个解决方案是什么?我认为线程可以提供帮助,但我怀疑它们是可能的,我的Socket.io服务器和其他类需要以某种方式进行通信,而“其他类”我的意思是主World
类,它有一个更新方法需要被调用并执行繁重的工作,以及我的服务器使用的getInfo
方法。我觉得大多数时候程序只是坐在那里,等待间隔开火,浪费时间而不是做计算......
另外,我想知道Node.js是否适合这些类型的任务。
答案 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!' });
}
}