10〜12のシミュレートされたリクエストごとに実行する必要のある重いデータ処理操作があります。より高いレベルの同時実行性については、Node.jsが優れたプラットフォームであり、非ブロッキングイベントループを持つことでそれを実現していることを読みました。
私が知っていることは、データベースのクエリなどを行うために、イベントを別のプロセス(mongod
、などmysqld
)に生成し、そのプロセスからの結果を処理するコールバックを作成できることです。けっこうだ。
しかし、コールバック内で大量の計算を実行したい場合はどうなりますか。そのコールバックのコードが完全に実行されるまで、他のリクエストをブロックしません。たとえば、高解像度の画像を処理したいのですが、コードはJavascript自体にあります(no separate
画像処理を行うプロセス)。
私の実装の考え方は
get_image_from_db(image_id, callback(imageBitMap) {
heavy_operation(imageBitMap); // Can take 5 seconds.
});
heavy_operation
これにより、ノードはこれらの5秒間リクエストを受け取ることができなくなります。それとも私はそのような仕事をするための間違った方法を考えていますか?ガイドしてください、私はJS初心者です。
アップデート
または、部分的な画像を処理し、イベントループに戻って他のコールバックを取り込んで、その部分的な画像の処理に戻ることができるようにすることもできます。(イベントの優先順位付けのようなもの)。