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