0

私はnodejsの新機能で、callstackについていくつか明確にしたいと思っています。私のアプリケーションはSQSからメッセージを読み込み、dynamo、mysql、streamなどの異なるデータソースに非同期でアップロードします。ここでの問題は、一度に20/30 msgを並行して受け取ることができる複数の作業者を使用することです。アップロードに非同期呼び出しを行います。操作がアップロードとコールバックを受信するのが遅いため、nodejsのイベントキューが疑わしい私はすべての非同期呼び出しを短時間でアップロードしている間に非同期呼び出しでいっぱいです.2つの質問がありますnodejsコールバック非同期呼び出し最大限度

1.イベントループの最大容量と一度にイベントループ内にあることができる非同期呼び出しの数です。

2.並行性を制御し、負荷の詳細を取得して、次回のアップロード非同期呼び出しに必要な待機時間を計算します。

ps:私は80000 msgsを10分で読むことができると仮定して、80000並列非同期アップロードIOコールを作成し、nodejsイベントループにそれらをキューイングできません。

答えて

0

換気ループに関する限り、進行中のタスクの最大数はわかりませんが、あなたができることは、Asyncのようなモジュールで進行中のタスクの数を制御できます伝統的なコールバックを使用して)、QかBluebird(約束を使っている場合)、またはES8の非同期/待機を使用している場合は約束ライブラリのいくつかの組み合わせで。

参照:

は特にparallelLimitなどのようなものを参照してください。

ここでは、イベントループの制限についてです。あなたは、このようなコードでそれをテストすることができます。

const n = 1000000; 
let s = 0; 
for (let i = 0; i < n; i++) { 
    setTimeout(() => { 
    s++; 
    if (i >= n - 1) { 
     console.log(s); 
    } 
    }); 
} 

イベントループそのものがあなたのケースでボトルネックになることはほとんどありませんので、あなたはイベントループで物事の何百万人を持つことは問題ではないことを見ることができます。オープンソケットのOS制限、または処理できる同時要求のサーバー制限にもっと関心があります。

上記の理由から、上記で説明した同時リクエストの数を制限する方法の1つを使用することをお勧めします。

関連する問題