2016-04-13 5 views
1

Wenn das, was ich verstehe, korrekt ist, ist die Verarbeitung von Hintergrundaufgaben eine gute Möglichkeit, den Hauptthread von cpu-gebundenen Aufgaben zu befreien.Was dauert es, um Hintergrundaufgaben im Knoten auszuführen?

Was ich nicht bekomme, ist, was von Systemen wie Bull oder Kue verwendet wird, um die Aufgaben aus dem Hauptthread auszuführen.

Verwenden sie Gewinde? Benötigen sie einen kompletten Node Process Fork? Entstehen sie Kindprozesse?

Antwort

1

Bull basiert auf Redis, die in seinem eigenen Prozess die Handhabung und das Einreihen von Daten für diese Jobs behandelt. Es handelt sich um eine leichte, robuste und schnelle Auftragsverarbeitungswarteschlange. Es verwendet redis für Persistenz, so dass die Warteschlange nicht verloren geht, wenn der Server aus irgendeinem Grund ausfällt.

die interne Implementierung des Jobs kann here

Das gleiche mit Kue-Modul ist, das eine Warteschlange Priorität Aufgabe ist durch redis Prozesse, für node.js. gebaut gesichert zu sehen Die Hintergrundaufgaben werden von Redis übernommen.

Das bedeutet, dass dieses Modul auf Redis externen Prozess angewiesen ist, der das Erstellen verschiedener Hintergrundjobs ermöglicht.

Job spezifische Ereignisse sind auf den Job-Instanzen über Redis PubSub gefeuert:

  • enqueue der Job jetzt
  • promotion Warteschlange wird der Auftrag aus verzögerten Zustand gefördert
  • progress die Aufgabe des Fortschritts der Warteschlange von 0-100
  • failed attempt Der Job ist fehlgeschlagen, hat aber noch weitere Versuche
  • failed der Job ist ausgefallen und hat keine weiteren Versuche
  • complete der Auftrag
  • abgeschlossen
  • remove der Job
  • entfernt wurde

Die verzögerten Jobs mit Energie versorgt wird von Redis Queue, die/benachrichtigt die Rückrufe in dem Trigger zurück Modul.

+0

Das ist sehr interessant, ich hatte keine Ahnung, bg Aufgaben von externen, nicht Knoten Prozess profitieren könnten. Und was sind die Fähigkeiten des Redis-Prozesses? Ist es ein Multiprozess? Gewinde? Ist es Single-Thread-begrenzt? –

+0

Redis ist ein Open-Source- (BSD lizenziert), speicherinterner Datenstrukturspeicher, der als Datenbank, Cache und Nachrichtenbroker verwendet wird. –

+0

Redis ist single-threaded mit epoll/kqueue und skaliert unbegrenzt in Bezug auf E/A-Parallelität. - @ antirez (Ersteller von Redis). http: // Stapelüberlauf.com/questions/21304947/redis-performance-on-a-multi-core-cpu –

0

So funktioniert node.js nicht. Node.js verwendet intern eine Ereignisschleife, um Anfragen zu bearbeiten (und somit zu einem ereignisgesteuerten Framework zu machen).

Diese gesamte Ereignisschleife wird in einem einzigen Thread ausgeführt. Wenn Sie einen lang laufenden Befehl ausführen (z. B. E/A- oder Netzwerkoperationen), wird die Anforderung in die Schleife eingereiht und der Prozess wird nicht blockiert. Wenn der Vorgang abgeschlossen ist, löst es einen Rückruf in Ihrem Code

Event Loop

+0

Haben Sie eine Quelle für das Bild? – Highmastdon