ObjectWorker
Das Worker-Objekt ist ein Objekt zum Erstellen untergeordneter Threads, das im Programm erstellt und verarbeitet werden kann. Ein Worker-Objekt kann als ein JavaScript-Prozess verstanden werden, der in einem anderen Thread als dem Haupt-Thread ausgeführt wird. Der Worker teilt den Speicher nicht mit dem Hauptthread und blockiert den Hauptthread nicht. Es handelt sich um eine gängige asynchrone Programmiermethode.
Der Konstruktor des Worker-Objekts lautet wie folgt:
1new Worker(String path, Object opts = {})
In,pathDer Parameter gibt den JavaScript-Dateipfad des neuen Threads an. Sie können beispielsweise eine work.js-Datei mit folgendem Inhalt schreiben:
1
2
3
4const {
Worker
} = require('worker_threads');
console.log('Hi from worker');
Führen Sie im Hauptprogramm work.js mit dem folgenden Code aus:
1
2
3
4const {
Worker
} = require('worker_threads');
const worker = new Worker('path/to/work.js');
Nach dem Ausführen können Sie die Ausgabe „Hallo vom Arbeiter“ auf der Konsole des Hauptprogramms sehen.
Nehmen wir im folgenden Beispiel an, dass wir eine lang laufende Berechnung haben und diese zur Verarbeitung in einen anderen Thread stellen möchten, ohne durch diese Berechnung im Hauptthread blockiert zu werden. Code wie folgt anzeigen:
Haupt-Bedroung:
1
2
3
4
5
6
7
8
9
10
11
12const {
Worker
} = require('worker_threads');
// create a worker thread
const fib = new Worker(__dirname + '/fib-worker.js');
// receive the result from the worker thread
fib.onmessage = (ev) => {
console.log('result: ', ev.data);
};
fib.postMessage(40);
console.log('main thread still working');
In diesem Beispiel erstellen wir über den Konstruktor des Worker-Objekts einen Arbeitsthread, um die Berechnung der Fibonacci-Folge zu verarbeiten. Der Hauptthread übergibt Daten über die Methode postMessage() an den Arbeitsthread und erhält die Verarbeitungsergebnisse über das Ereignis onmessage . Gleichzeitig zeigt der Hauptthread die Meldung „funktioniert noch“ an, um zu beweisen, dass diese Rechenaufgabe an den Arbeitsthread „delegiert“ wurde und weiterhin andere Dinge verarbeiten kann.
Der Worker-Thread-Codestil ist wie folgt:
1
2
3
4
5
6
7
8
9
10
11
12// fib-worker.js
Master.onmessage = (ev) => {
const n = ev.data;
const result = fib(n);
// Once the calculation has been completed, the result is sent back to the main thread.
Master.postMessage(result);
};
function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
Im Arbeitsthread haben wir die vom Hauptthread über den Eingabeparameter postMessage() gesendeten Nachrichten abgehört, die angegebene Fibonacci-Sequenz berechnet und die Berechnungsergebnisse über die Methode Master.postMessage() an den Hauptthread zurückgesendet.
Dies ist das grundlegendste Worker-Beispiel. Bei der Entwicklung mit Worker-Objekten sind der Haupt-Thread und der Worker-Thread vollständig asynchron. Jedes Worker-Objekt ist ein separater Thread. Das im Haupt-Thread instanziierte Worker-Objekt generiert keinen Block.
Erbschaftsverhältnis
Konstrukteur
Worker
Konstruktor für Worker-Objekte
1
2new Worker(String path,
Object opts = {});
Aufrufparameter:
- path: String, gibt das Worker-Eintrittsskript an, akzeptiert nur absolute Pfade
- opts: Objekt, Konstruktionsoption, noch nicht unterstützt
statische Eigenschaften
defaultMaxListeners
Ganzzahl, die standardmäßige globale maximale Anzahl von Listenern
1static Integer Worker.defaultMaxListeners;
Mitgliedereigenschaften
onload
Funktion, Abfrage und Bindung akzeptieren das Ladenachrichtenereignis, das on("load", func);
1Function Worker.onload;
onmessage
Funktion, Abfrage und Bindung akzeptieren PostMessage-Nachrichtenereignisse, äquivalent zu on("message", func);
1Function Worker.onmessage;
onerror
Funktion, Abfrage und Bindung akzeptieren Fehlermeldungsereignisse, äquivalent zu on("error", func);
1Function Worker.onerror;
Mitgliedsfunktion
postMessage
Senden Sie eine Nachricht an den Meister oder Arbeiter,
1Worker.postMessage(Value data);
Aufrufparameter:
- data: Wert, gibt den Inhalt der gesendeten Nachricht an
on
Binden Sie einen Event-Handler an das Objekt
1
2Object Worker.on(String ev,
Function func);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
- func: Funktion, geben Sie die Ereignisverarbeitungsfunktion an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Binden Sie einen Event-Handler an das Objekt
1Object Worker.on(Object map);
Aufrufparameter:
- map: Objekt, gibt die Ereigniszuordnungsbeziehung an, der Objektattributname wird als Ereignisname und der Wert des Attributs als Ereignisverarbeitungsfunktion verwendet
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
addListener
Binden Sie einen Event-Handler an das Objekt
1
2Object Worker.addListener(String ev,
Function func);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
- func: Funktion, geben Sie die Ereignisverarbeitungsfunktion an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Binden Sie einen Event-Handler an das Objekt
1Object Worker.addListener(Object map);
Aufrufparameter:
- map: Objekt, gibt die Ereigniszuordnungsbeziehung an, der Objektattributname wird als Ereignisname und der Wert des Attributs als Ereignisverarbeitungsfunktion verwendet
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
prependListener
Binden Sie einen Ereignishandler an den Ursprung des Objekts
1
2Object Worker.prependListener(String ev,
Function func);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
- func: Funktion, geben Sie die Ereignisverarbeitungsfunktion an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Binden Sie einen Ereignishandler an den Ursprung des Objekts
1Object Worker.prependListener(Object map);
Aufrufparameter:
- map: Objekt, gibt die Ereigniszuordnungsbeziehung an, der Objektattributname wird als Ereignisname und der Wert des Attributs als Ereignisverarbeitungsfunktion verwendet
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
once
Binden Sie einen einmaligen Ereignishandler an das Objekt. Der einmalige Handler wird nur einmal ausgelöst.
1
2Object Worker.once(String ev,
Function func);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
- func: Funktion, geben Sie die Ereignisverarbeitungsfunktion an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Binden Sie einen einmaligen Ereignishandler an das Objekt. Der einmalige Handler wird nur einmal ausgelöst.
1Object Worker.once(Object map);
Aufrufparameter:
- map: Objekt, gibt die Ereigniszuordnungsbeziehung an, der Objektattributname wird als Ereignisname und der Wert des Attributs als Ereignisverarbeitungsfunktion verwendet
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
prependOnceListener
Binden Sie einen Ereignishandler an den Ursprung des Objekts
1
2Object Worker.prependOnceListener(String ev,
Function func);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
- func: Funktion, geben Sie die Ereignisverarbeitungsfunktion an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Binden Sie einen Ereignishandler an den Ursprung des Objekts
1Object Worker.prependOnceListener(Object map);
Aufrufparameter:
- map: Objekt, gibt die Ereigniszuordnungsbeziehung an, der Objektattributname wird als Ereignisname und der Wert des Attributs als Ereignisverarbeitungsfunktion verwendet
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
off
Heben Sie die Zuweisung einer Funktion zur Objektverarbeitungswarteschlange auf
1
2Object Worker.off(String ev,
Function func);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
- func: Funktion, geben Sie die Ereignisverarbeitungsfunktion an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Brechen Sie alle Funktionen in der Objektverarbeitungswarteschlange ab
1Object Worker.off(String ev);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Heben Sie die Zuweisung einer Funktion zur Objektverarbeitungswarteschlange auf
1Object Worker.off(Object map);
Aufrufparameter:
- map: Objekt, gibt die Ereigniszuordnungsbeziehung an, der Objektattributname wird als Ereignisname und der Wert des Attributs als Ereignisverarbeitungsfunktion verwendet
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
removeListener
Heben Sie die Zuweisung einer Funktion zur Objektverarbeitungswarteschlange auf
1
2Object Worker.removeListener(String ev,
Function func);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
- func: Funktion, geben Sie die Ereignisverarbeitungsfunktion an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Brechen Sie alle Funktionen in der Objektverarbeitungswarteschlange ab
1Object Worker.removeListener(String ev);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Heben Sie die Zuweisung einer Funktion zur Objektverarbeitungswarteschlange auf
1Object Worker.removeListener(Object map);
Aufrufparameter:
- map: Objekt, gibt die Ereigniszuordnungsbeziehung an, der Objektattributname wird als Ereignisname und der Wert des Attributs als Ereignisverarbeitungsfunktion verwendet
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
removeAllListeners
Löscht alle Listener für alle Ereignisse aus der Verarbeitungswarteschlange des Objekts. Wenn ein Ereignis angegeben ist, werden alle Listener für das angegebene Ereignis entfernt.
1Object Worker.removeAllListeners(String ev);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
Löscht alle Listener für alle Ereignisse aus der Verarbeitungswarteschlange des Objekts. Wenn ein Ereignis angegeben ist, werden alle Listener für das angegebene Ereignis entfernt.
1Object Worker.removeAllListeners(Array evs = []);
Aufrufparameter:
- evs: Array, geben Sie den Namen des Ereignisses an
Rückgabeergebnisse:
- Object, gibt das Ereignisobjekt selbst zurück, um Kettenaufrufe zu erleichtern
setMaxListeners
Die Standardbeschränkung für die Anzahl der Listener dient nur der Kompatibilität
1Worker.setMaxListeners(Integer n);
Aufrufparameter:
- n: Ganzzahl, geben Sie die Anzahl der Ereignisse an
getMaxListeners
Ruft nur aus Kompatibilitätsgründen die standardmäßige maximale Anzahl von Listenern ab
1Integer Worker.getMaxListeners();
Rückgabeergebnisse:
- Integer, gibt die Standardgrenzmenge zurück
listeners
Fragen Sie das Listener-Array nach dem angegebenen Ereignis des Objekts ab
1Array Worker.listeners(String ev);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
Rückgabeergebnisse:
- Array, gibt das Listener-Array für das angegebene Ereignis zurück
listenerCount
Fragen Sie die Anzahl der Listener für das angegebene Ereignis des Objekts ab
1Integer Worker.listenerCount(String ev);
Aufrufparameter:
- ev: String, gibt den Namen des Ereignisses an
Rückgabeergebnisse:
- Integer, gibt die Anzahl der Listener für das angegebene Ereignis zurück
Fragen Sie die Anzahl der Listener für das angegebene Ereignis des Objekts ab
1
2Integer Worker.listenerCount(Value o,
String ev);
Aufrufparameter:
- o: Wert, gibt das Objekt der Abfrage an
- ev: String, gibt den Namen des Ereignisses an
Rückgabeergebnisse:
- Integer, gibt die Anzahl der Listener für das angegebene Ereignis zurück
eventNames
Name des Abfrage-Listener-Ereignisses
1Array Worker.eventNames();
Rückgabeergebnisse:
- Array, gibt ein Array von Ereignisnamen zurück
emit
Ein Ereignis aktiv auslösen
1
2Boolean Worker.emit(String ev,
...args);
Aufrufparameter:
- ev: String, Ereignisname
- args: ..., Ereignisparameter werden an die Ereignisverarbeitungsfunktion übergeben
Rückgabeergebnisse:
- Boolean, gibt den Ereignisauslöserstatus zurück, gibt „true“ zurück, wenn ein Antwortereignis vorliegt, andernfalls wird „false“ zurückgegeben
toString
Gibt die Zeichenfolgendarstellung des Objekts zurück. Im Allgemeinen wird „[Native Object]“ zurückgegeben. Das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden.
1String Worker.toString();
Rückgabeergebnisse:
- String, gibt die Zeichenfolgendarstellung des Objekts zurück
toJSON
Gibt eine Darstellung des Objekts im JSON-Format zurück und gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die vom Objekt definiert werden.
1Value Worker.toJSON(String key = "");
Aufrufparameter:
- key: Zeichenfolge, nicht verwendet
Rückgabeergebnisse:
- Value, gibt einen Wert zurück, der JSON serialisierbar enthält