Objekt integriertes Objekt

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:

1
new 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 4
const { Worker } = require('worker_threads'); console.log('Hi from worker');

Führen Sie im Hauptprogramm work.js mit dem folgenden Code aus:

1 2 3 4
const { 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 12
const { 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 2
new 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

1
static Integer Worker.defaultMaxListeners;

Mitgliedereigenschaften

onload

Funktion, Abfrage und Bindung akzeptieren das Ladenachrichtenereignis, das on("load", func);

1
Function Worker.onload;

onmessage

Funktion, Abfrage und Bindung akzeptieren PostMessage-Nachrichtenereignisse, äquivalent zu on("message", func);

1
Function Worker.onmessage;

onerror

Funktion, Abfrage und Bindung akzeptieren Fehlermeldungsereignisse, äquivalent zu on("error", func);

1
Function Worker.onerror;

Mitgliedsfunktion

postMessage

Senden Sie eine Nachricht an den Meister oder Arbeiter,

1
Worker.postMessage(Value data);

Aufrufparameter:

  • data: Wert, gibt den Inhalt der gesendeten Nachricht an

on

Binden Sie einen Event-Handler an das Objekt

1 2
Object 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

1
Object 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 2
Object 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

1
Object 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 2
Object 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

1
Object 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 2
Object 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.

1
Object 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 2
Object 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

1
Object 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 2
Object 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

1
Object 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

1
Object 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 2
Object 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

1
Object 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

1
Object 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.

1
Object 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.

1
Object 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

1
Worker.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

1
Integer Worker.getMaxListeners();

Rückgabeergebnisse:

  • Integer, gibt die Standardgrenzmenge zurück

listeners

Fragen Sie das Listener-Array nach dem angegebenen Ereignis des Objekts ab

1
Array 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

1
Integer 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 2
Integer 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

1
Array Worker.eventNames();

Rückgabeergebnisse:

  • Array, gibt ein Array von Ereignisnamen zurück

emit

Ein Ereignis aktiv auslösen

1 2
Boolean 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.

1
String 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.

1
Value Worker.toJSON(String key = "");

Aufrufparameter:

  • key: Zeichenfolge, nicht verwendet

Rückgabeergebnisse:

  • Value, gibt einen Wert zurück, der JSON serialisierbar enthält