(mit Sails.js)
Ich teste Webworker-Threads ( Ссылка ) für lange laufende Prozesse auf Node und das folgende Beispiel sieht gut aus :
%Vor%Aber sobald ich irgendeinen Code hinzufüge, um Mongodb abzufragen, löst er eine Ausnahme aus: (Verwenden Sie nicht das Sails-Modell in der Abfrage, nur um sicherzustellen, dass der Code eigenständig ausgeführt werden kann - db hat kein Kennwort)
%Vor% Da der DB-Code außerhalb des Worker einwandfrei funktioniert, glaube ich, dass er etwas mit require
zu tun hat. Ich habe etwas versucht, das auch außerhalb des Worker funktioniert, wie
Und der Code löst auch eine Ausnahme aus. Leider zeigt console.log dies nur für alle Arten von Fehlern an:
%Vor%Die Fragen lauten also: Gibt es Einschränkungen oder Richtlinien für die Verwendung in einem Worker? Was könnte ich hier falsch machen?
AKTUALISIEREN
es scheint, Threads erlauben keine externen Module Ссылка
TL: DR Ich denke, wenn Sie benötigen, sollten Sie einen Knoten verwenden Cluster- oder Kindprozess. Wenn Sie etwas cpu beschäftigte Arbeit abladen möchten, du solltest tagg und die load-funktion nutzen, um dir irgendwelche helfer zu holen brauche.
Nachdem ich diesen Thread gelesen habe, sehe ich, dass diese Frage der folgenden ähnelt: Load Nodejs Module in einen Web Worker
ladenZu welcher Audreyt, der Webworker-Thread-Autor geantwortet hat:
Autor von Webworker-Threads hier. Danke für die Benutzung des Moduls!
Es gibt ein standardmäßiges natives_fs_ Objekt mit dem readFileSync, das Sie verwenden können um Dateien zu lesen.
Darüber hinaus habe ich mich hauptsächlich auf onejs verlassen, um alle benötigten zu kompilieren Module in package.json in eine einzige JS-Datei für importScripts nach verwenden, genau wie bei der Bereitstellung für einen clientseitigen Web-Worker Umgebung. (Es gibt auch viele Alternativen zu onejs - browserify, usw.)
Hoffe, das hilft!
So scheint es importScripts
ist der Weg zu gehen. Aber zu diesem Zeitpunkt könnte es zu hacky sein, was ich tun möchte, also ist KUE
wahrscheinlich eine ausgereiftere Lösung.
Ich bin Mitarbeiter des node-webworker-threads Projekts.
require
in node-webworker-threads
Sie haben in Ihrem Update Recht: node-webworker-threads
unterstützt (momentan) nicht require
externe Module.
Es hat nur begrenzte Unterstützung für einige der integrierten Funktionen, einschließlich Dateisystemaufrufen und einer Version von console.log
. Wie Sie festgestellt haben, ist die in console.log
implementierte Version von node-webworker-threads
nicht identisch mit der eingebauten console.log
in Node.js; es macht zum Beispiel nicht automatisch nette String-Repräsentationen der Komponenten eines Objekts.
In einigen Fällen können Sie externe Module verwenden, wie von audreyt in ihrer Antwort beschrieben. Natürlich ist das nicht ideal, und ich sehe die unvollständige require
als primären "Dealbreaker" von node-webworker-threads
. Ich hoffe, dass ich diesen Sommer daran arbeiten kann.
node-webworker-threads
verwendet?
node-webworker-threads
können Sie Code für die WebWorker-API erstellen und denselben Code im Client (Browser) und auf dem Server (Node.js) ausführen. Deshalb würden Sie node-webworker-threads
über node-threads-a-gogo verwenden.
node-webworker-threads
ist großartig, wenn Sie möchten, dass die leichtesten JavaScript-basierten Worker etwas CPU-gebunden machen. Beispiele: Primzahlen, Fibonacci, eine Monte-Carlo-Simulation, die integrierte, aber potentiell teure Operationen wie die reguläre Ausdrücke-Anpassung auslagern.
node-webworker-threads
zu verwenden
node-webworker-threads
betont die Portabilität gegenüber der Bequemlichkeit. Für eine Node.js-only-Lösung bedeutet dies, dass node-webworker-threads
nicht der richtige Weg ist.
Wenn Sie Kompromisse bei der Portabilität von Fullstacks eingehen möchten, gibt es zwei Möglichkeiten: Geschwindigkeit und Komfort.
Versuchen Sie für Geschwindigkeit ein C ++ - Add-on . Benutze NaN . Ich empfehle Scott Frees C ++ und Node.js Integration Buch, um zu lernen, wie man das macht, es wird Ihnen viel Zeit sparen. Sie werden dafür bezahlen, dass Sie Ihre C ++ - Kenntnisse auffrischen müssen, und wenn Sie mit MongoDB arbeiten möchten, ist das wahrscheinlich keine gute Idee.
Verwenden Sie für Komfort einen untergeordneten Prozess -basierten Workerpool wie forschen-pool . In diesem Fall ist jeder Worker eine vollwertige Node.js-Instanz. Sie können dann require
nach Herzenslust bearbeiten. Sie zahlen dafür in einem größeren Anwendungsbereich und höheren Kommunikationskosten im Vergleich zu node-webworker-threads
oder einem C ++ Add-on.
Tags und Links multithreading node.js web-worker sails.js