こんにちは、
Promise.allは配列で一番長いプロミスがチャンクの実行時間になります。
このため、最も長いプロミスが完了するまで次のプロミスが何もしないという非効率的な問題が発生します。
私はこの問題を効果的に解決するために"Arehs"を作りました。
🤔 WHY AREHS?
Arehsはイベント中心のchunk processingを目指す最高の大規模バッチ処理を保証します。
これは、最初の非同期タスクの呼び出しが完了するのを待つことなく、次の非同期タスクの呼び出しを即座に割り当てることで、密にプロセスを実行します。
これにより、次のような多くのことを達成することができます:
プロミスの同時性を設定することで、サービスのスループットを制御することができます。
プロミスの同時性を設定することで、下流サービスの負荷を管理します。
アプリケーションのパフォーマンス向上
CPUアイドル時間の削減など
Promise.all
ご覧のように、Promise.allはバッチ内で最も遅いプロミスと同じ時間だけ実行されます。
つまり、メインスレッドは基本的に "何もせず"、最も遅いリクエストが終了するのを待っているのです。
Promise配列の中で一番長いプロミス、4番がチャンクの実行時間になります。
これは、最長のプロミスが終了するまで次のプロミスが何もしないという非効率な問題を引き起こします。
Arehs
Arehsはプロミスプルパターンを実行してNode.jsのメインスレッドを最大限に活用することが重要です。
利用率を高めるためには、APIコール(または他の非同期タスク)を密集して、最も長いコールが完了する間、待機しないようにする必要があります。
待たずに最初の呼び出しが完了するとすぐに次の呼び出しをスケジュールします。
このプロジェクトに興味がある方は、日本語翻訳のためのドキュメントや新機能や問題解決のためにPull Requestすることができます。
詳細は下記のリンクを確認してください。
ありがとうございます。🙏