3

進化的知能や人工知能など、パフォーマンスが非常に高いアルゴリズムをいくつか作成しています。私にとって重要なのは、更新関数が頻繁に呼び出され(精度)、setInterval1ミリ秒に1回より速く更新できないことです。

当初は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を使用して別のスレッドで重いアルゴリズムを実行し、次の方法でメインスレッドで結果を待つことができます。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!' });
    }
}
于 2012-08-22T14:56:27.963 に答える