Oggetto oggetto incorporato

ObjectWorker

L'oggetto Worker è un oggetto utilizzato per creare thread figli, che possono essere creati ed elaborati nel programma. Un oggetto Worker può essere inteso come un processo JavaScript che viene eseguito in un thread diverso dal thread principale. Il lavoratore non condivide la memoria con il thread principale e non blocca il thread principale. È un metodo di programmazione asincrono tradizionale.

Il costruttore dell'oggetto Worker è il seguente:

1
new Worker(String path, Object opts = {})

In,pathIl parametro specifica il percorso del file JavaScript del nuovo thread. Ad esempio, puoi scrivere un file work.js con il seguente contenuto:

1 2 3 4
const { Worker } = require('worker_threads'); console.log('Hi from worker');

Nel programma principale, esegui work.js con il seguente codice:

1 2 3 4
const { Worker } = require('worker_threads'); const worker = new Worker('path/to/work.js');

Dopo l'esecuzione, puoi vedere l'output "Ciao dal lavoratore" sulla console del programma principale.

Nell'esempio seguente, supponiamo di avere un calcolo di lunga durata e di volerlo inserire in un altro thread per elaborarlo senza essere bloccati da questo calcolo nel thread principale. codice mostrato come di seguito:

Discussione principale:

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 questo esempio creiamo un thread di lavoro tramite il costruttore dell'oggetto Worker per elaborare il calcolo della sequenza di Fibonacci. Il thread principale passa i dati al thread di lavoro tramite il metodo postMessage() e ottiene i risultati dell'elaborazione tramite l'evento onmessage . Allo stesso tempo, il thread principale visualizza il messaggio "ancora in funzione" per dimostrare che questa attività di elaborazione è stata "delegata" al thread di lavoro e può continuare a elaborare altre cose.

Lo stile del codice del thread di lavoro è il seguente:

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); }

Nel thread di lavoro, abbiamo ascoltato i messaggi inviati dal thread principale tramite il parametro di ingresso postMessage(), calcolato la sequenza di Fibonacci specificata e inviato i risultati del calcolo al thread principale tramite il metodo Master.postMessage().

Questo è l'esempio Worker più elementare. Quando si sviluppa utilizzando oggetti Worker, il thread principale e il thread di lavoro sono completamente asincroni. Ogni oggetto Worker è un thread separato. L'oggetto Worker istanziato nel thread principale non genererà alcun blocco.

rapporto ereditario

Costruttore

Worker

Costruttore di oggetti lavoratore

1 2
new Worker(String path, Object opts = {});

Parametri di chiamata:

  • path: String, specifica lo script della voce Worker, accetta solo percorsi assoluti
  • opts: Oggetto, opzione di costruzione, non ancora supportata

proprietà statiche

defaultMaxListeners

Intero, il numero massimo globale predefinito di ascoltatori

1
static Integer Worker.defaultMaxListeners;

proprietà dei membri

onload

Funzione, query e associazione accettano l'evento load message, che equivale a on("load", func);

1
Function Worker.onload;

onmessage

Funzione, query e associazione accettano eventi di messaggio postMessage, equivalenti a on("message", func);

1
Function Worker.onmessage;

onerror

Funzione, query e associazione accettano eventi di messaggi di errore, equivalenti a on("error", func);

1
Function Worker.onerror;

funzione membro

postMessage

Invia un messaggio al Maestro o all'Operaio,

1
Worker.postMessage(Value data);

Parametri di chiamata:

  • data: Valore, specifica il contenuto del messaggio inviato

on

Associa un gestore eventi all'oggetto

1 2
Object Worker.on(String ev, Function func);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento
  • func: Funzione, specifica la funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Associa un gestore eventi all'oggetto

1
Object Worker.on(Object map);

Parametri di chiamata:

  • map: Oggetto, specifica la relazione di mappatura degli eventi, il nome dell'attributo dell'oggetto verrà utilizzato come nome dell'evento e il valore dell'attributo verrà utilizzato come funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

addListener

Associa un gestore eventi all'oggetto

1 2
Object Worker.addListener(String ev, Function func);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento
  • func: Funzione, specifica la funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Associa un gestore eventi all'oggetto

1
Object Worker.addListener(Object map);

Parametri di chiamata:

  • map: Oggetto, specifica la relazione di mappatura degli eventi, il nome dell'attributo dell'oggetto verrà utilizzato come nome dell'evento e il valore dell'attributo verrà utilizzato come funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

prependListener

Associa un gestore eventi all'origine dell'oggetto

1 2
Object Worker.prependListener(String ev, Function func);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento
  • func: Funzione, specifica la funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Associa un gestore eventi all'origine dell'oggetto

1
Object Worker.prependListener(Object map);

Parametri di chiamata:

  • map: Oggetto, specifica la relazione di mappatura degli eventi, il nome dell'attributo dell'oggetto verrà utilizzato come nome dell'evento e il valore dell'attributo verrà utilizzato come funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

once

Associa un gestore di eventi monouso all'oggetto. Il gestore di eventi monouso verrà attivato solo una volta.

1 2
Object Worker.once(String ev, Function func);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento
  • func: Funzione, specifica la funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Associa un gestore di eventi monouso all'oggetto. Il gestore di eventi monouso verrà attivato solo una volta.

1
Object Worker.once(Object map);

Parametri di chiamata:

  • map: Oggetto, specifica la relazione di mappatura degli eventi, il nome dell'attributo dell'oggetto verrà utilizzato come nome dell'evento e il valore dell'attributo verrà utilizzato come funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

prependOnceListener

Associa un gestore eventi all'origine dell'oggetto

1 2
Object Worker.prependOnceListener(String ev, Function func);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento
  • func: Funzione, specifica la funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Associa un gestore eventi all'origine dell'oggetto

1
Object Worker.prependOnceListener(Object map);

Parametri di chiamata:

  • map: Oggetto, specifica la relazione di mappatura degli eventi, il nome dell'attributo dell'oggetto verrà utilizzato come nome dell'evento e il valore dell'attributo verrà utilizzato come funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

off

Annullare l'assegnazione di una funzione dalla coda di elaborazione degli oggetti

1 2
Object Worker.off(String ev, Function func);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento
  • func: Funzione, specifica la funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Annulla tutte le funzioni nella coda di elaborazione degli oggetti

1
Object Worker.off(String ev);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Annullare l'assegnazione di una funzione dalla coda di elaborazione degli oggetti

1
Object Worker.off(Object map);

Parametri di chiamata:

  • map: Oggetto, specifica la relazione di mappatura degli eventi, il nome dell'attributo dell'oggetto viene utilizzato come nome dell'evento e il valore dell'attributo viene utilizzato come funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

removeListener

Annullare l'assegnazione di una funzione dalla coda di elaborazione degli oggetti

1 2
Object Worker.removeListener(String ev, Function func);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento
  • func: Funzione, specifica la funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Annulla tutte le funzioni nella coda di elaborazione degli oggetti

1
Object Worker.removeListener(String ev);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Annullare l'assegnazione di una funzione dalla coda di elaborazione degli oggetti

1
Object Worker.removeListener(Object map);

Parametri di chiamata:

  • map: Oggetto, specifica la relazione di mappatura degli eventi, il nome dell'attributo dell'oggetto viene utilizzato come nome dell'evento e il valore dell'attributo viene utilizzato come funzione di elaborazione dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

removeAllListeners

Annulla tutti i listener per tutti gli eventi dalla coda di elaborazione dell'oggetto. Se viene specificato un evento, rimuove tutti i listener per l'evento specificato.

1
Object Worker.removeAllListeners(String ev);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

Annulla tutti i listener per tutti gli eventi dalla coda di elaborazione dell'oggetto. Se viene specificato un evento, rimuove tutti i listener per l'evento specificato.

1
Object Worker.removeAllListeners(Array evs = []);

Parametri di chiamata:

  • evs: Array, specifica il nome dell'evento

Risultati restituiti:

  • Object, restituisce l'oggetto evento stesso per facilitare le chiamate a catena

setMaxListeners

Il limite predefinito sul numero di ascoltatori, solo per compatibilità

1
Worker.setMaxListeners(Integer n);

Parametri di chiamata:

  • n: Numero intero, specifica il numero di eventi

getMaxListeners

Ottiene il numero limite predefinito di ascoltatori, solo per compatibilità

1
Integer Worker.getMaxListeners();

Risultati restituiti:

  • Integer, restituisce la quantità limite predefinita

listeners

Interroga l'array del listener per l'evento specificato dell'oggetto

1
Array Worker.listeners(String ev);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento

Risultati restituiti:

  • Array, restituisce l'array del listener per l'evento specificato

listenerCount

Interroga il numero di ascoltatori per l'evento specificato dell'oggetto

1
Integer Worker.listenerCount(String ev);

Parametri di chiamata:

  • ev: String, specifica il nome dell'evento

Risultati restituiti:

  • Integer, restituisce il numero di ascoltatori per l'evento specificato

Interroga il numero di ascoltatori per l'evento specificato dell'oggetto

1 2
Integer Worker.listenerCount(Value o, String ev);

Parametri di chiamata:

  • o: Valore, specifica l'oggetto della query
  • ev: String, specifica il nome dell'evento

Risultati restituiti:

  • Integer, restituisce il numero di ascoltatori per l'evento specificato

eventNames

Interroga il nome dell'evento del listener

1
Array Worker.eventNames();

Risultati restituiti:

  • Array, restituisce una matrice di nomi di eventi

emit

Attiva attivamente un evento

1 2
Boolean Worker.emit(String ev, ...args);

Parametri di chiamata:

  • ev: stringa, nome dell'evento
  • args: ..., i parametri dell'evento verranno passati alla funzione di elaborazione degli eventi

Risultati restituiti:

  • Boolean, restituisce lo stato di attivazione dell'evento, restituisce true se è presente un evento di risposta, altrimenti restituisce false

toString

Restituisce la rappresentazione in formato stringa dell'oggetto. Generalmente viene restituito "[Oggetto nativo]". L'oggetto può essere reimplementato in base alle proprie caratteristiche.

1
String Worker.toString();

Risultati restituiti:

  • String, restituisce la rappresentazione di stringa dell'oggetto

toJSON

Restituisce una rappresentazione in formato JSON dell'oggetto, generalmente restituendo una raccolta di proprietà leggibili definite dall'oggetto.

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

Parametri di chiamata:

  • key: Stringa, non utilizzata

Risultati restituiti:

  • Value, restituisce un valore contenente JSON serializzabile