0

Ich bin neu bei Nodejs und möchte etwas Klarheit über den Callstack haben. Meine Anwendung liest Nachrichten von SQS und lädt asynchron auf verschiedene Datenquellen wie Dynamo, MySQL, Stream etc .. Das Problem hier ist die Verwendung mehrerer Arbeiter, die wir parallel 20/30 msgs gleichzeitig empfangen können und Async-Aufrufe zum Hochladen machen. Da die Operation langsamer ist, um den Callback hochzuladen und zu empfangen, bezweifle ich die Event-Queue in nodejs gefüllt mit Async-Anrufe, während ich alle asynchronen Anrufe hochzuladen in kurzer Zeit.So habe ich zwei Fragennodejs Callback Async Anrufe Maximalbegrenzung

1.Was ist die maximale Kapazität der Ereignisschleife und wie viele Async-Aufrufe können in Ereignisschleife auf einmal liegen.

2.Wie steuern Sie die Nebenläufigkeit und erhalten Sie die Details zum Laden und Berechnen der Wartezeit für den nächsten Upload Async-Aufruf benötigt.

ps: Angenommen, ich kann 80000 Nachrichten in 10 Minuten lesen, kann ich nicht 80000 parallel async Upload IO-Aufrufe und Warteschlange sie in Nodejs Event-Schleife. Bitte helfen Sie mir, dies zu verstehen.

Antwort

0

Ich weiß nicht, wie viele Aufgaben in Bezug auf die Vent-Schleife maximal ausgeführt werden, aber Sie können die Anzahl der laufenden Aufgaben mit Modulen wie Async steuern (wenn Sie (Verwenden Sie herkömmliche Rückrufe), Q oder Bluebird (wenn Sie Versprechungen verwenden) oder eine Kombination von Zusicherungsbibliotheken, wenn Sie ES8 async/await verwenden.

See:

Vor allem Dinge wie parallelLimit sehen etc:

Jetzt für die Ereignisschleife Grenzen. Sie können es mit einem Code testen wie folgt aus:

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

Sie können sehen, dass Millionen von Dingen auf dem Ereignisschleife ist kein Problem, so dass die Ereignisschleife selbst unwahrscheinlich ist ein Engpass in Ihrem Fall sein. Ich würde mehr mit Ihrem OS-Limit von offenen Sockets oder Ihrem Server Limit von gleichzeitigen Anfragen betroffen sein, die es behandeln kann.

Aus diesem Grund würde ich empfehlen, eine der Möglichkeiten zu verwenden, um die Anzahl der gleichzeitigen Anfragen zu begrenzen, die ich oben beschrieben habe.