私が理解していることが正しければ、バックグラウンド タスクを処理することは、CPU バウンド タスクのメイン スレッドを解放する良い方法です。
私が得られないのは、メイン スレッドからタスクを実行するために、bull や kue などのシステムで使用されるものです。
彼らはスレッドを使用していますか?ノードプロセスフォーク全体が必要ですか? それらは子プロセスを生成しますか?
私が理解していることが正しければ、バックグラウンド タスクを処理することは、CPU バウンド タスクのメイン スレッドを解放する良い方法です。
私が得られないのは、メイン スレッドからタスクを実行するために、bull や kue などのシステムで使用されるものです。
彼らはスレッドを使用していますか?ノードプロセスフォーク全体が必要ですか? それらは子プロセスを生成しますか?
Bull は、これらのジョブのデータの処理とキューイングを独自のプロセスで処理するRedisに基づいています。これは、軽量で堅牢で高速なジョブ処理キューです。永続化のためにredisを使用するため、何らかの理由でサーバーがダウンしてもキューが失われることはありません。
ジョブの内部実装はここで見ることができます
同じことが、node.js 用に構築された、redis プロセスによってサポートされる優先ジョブ キューである Kue モジュールにも当てはまります。バックグラウンド タスクは Redis を利用しています。
これは、これらのモジュールが、さまざまなバックグラウンド ジョブの作成を可能にする Redis 外部プロセスに依存していることを意味します。
Job 固有のイベントは、Redis pubsub を介して Job インスタンスで発生します。
enqueue
ジョブは現在キューに入れられていますpromotion
ジョブは遅延状態からキューに昇格されますprogress
ジョブの進行状況 (0 ~ 100)failed attempt
ジョブは失敗しましたが、まだ試行が残っていますfailed
ジョブは失敗し、残りの試行はありませんcomplete
仕事が完了しましたremove
ジョブが削除されました遅延ジョブは、モジュール内のコールバックを通知/トリガーする Redis Queue によって強化されます。
それはnode.jsの仕組みではありません。Node.js は内部的にイベント ループを使用してリクエストを処理します (したがって、イベント ドリブン フレームワークになります)。
このイベント ループ全体が 1 つのスレッドで実行されます。長時間実行されるコマンド (I/O やネットワーク操作など) を実行すると、リクエストはループのキューに入れられ、プロセスはブロックされません。操作が完了すると、コードでコールバックがトリガーされます