1

私が理解していることが正しければ、バックグラウンド タスクを処理することは、CPU バウンド タスクのメイン スレッドを解放する良い方法です。

私が得られないのは、メイン スレッドからタスクを実行するために、bull や kue などのシステムで使用されるものです。

彼らはスレッドを使用していますか?ノードプロセスフォーク全体が必要ですか? それらは子プロセスを生成しますか?

4

2 に答える 2

1

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 によって強化されます。

于 2016-04-13T04:58:42.427 に答える
0

それはnode.jsの仕組みではありません。Node.js は内部的にイベント ループを使用してリクエストを処理します (したがって、イベント ドリブン フレームワークになります)。

このイベント ループ全体が 1 つのスレッドで実行されます。長時間実行されるコマンド (I/O やネットワーク操作など) を実行すると、リクエストはループのキューに入れられ、プロセスはブロックされません。操作が完了すると、コードでコールバックがトリガーされます

イベントループ

于 2016-04-13T05:06:16.497 に答える