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:
1new 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
4const {
Worker
} = require('worker_threads');
console.log('Hi from worker');
Nel programma principale, esegui work.js con il seguente codice:
1
2
3
4const {
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
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 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
2new 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
1static Integer Worker.defaultMaxListeners;
proprietà dei membri
onload
Funzione, query e associazione accettano l'evento load message, che equivale a on("load", func);
1Function Worker.onload;
onmessage
Funzione, query e associazione accettano eventi di messaggio postMessage, equivalenti a on("message", func);
1Function Worker.onmessage;
onerror
Funzione, query e associazione accettano eventi di messaggi di errore, equivalenti a on("error", func);
1Function Worker.onerror;
funzione membro
postMessage
Invia un messaggio al Maestro o all'Operaio,
1Worker.postMessage(Value data);
Parametri di chiamata:
- data: Valore, specifica il contenuto del messaggio inviato
on
Associa un gestore eventi all'oggetto
1
2Object 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
1Object 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
2Object 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
1Object 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
2Object 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
1Object 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
2Object 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.
1Object 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
2Object 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
1Object 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
2Object 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
1Object 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
1Object 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
2Object 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
1Object 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
1Object 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.
1Object 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.
1Object 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à
1Worker.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à
1Integer Worker.getMaxListeners();
Risultati restituiti:
- Integer, restituisce la quantità limite predefinita
listeners
Interroga l'array del listener per l'evento specificato dell'oggetto
1Array 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
1Integer 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
2Integer 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
1Array Worker.eventNames();
Risultati restituiti:
- Array, restituisce una matrice di nomi di eventi
emit
Attiva attivamente un evento
1
2Boolean 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.
1String 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.
1Value Worker.toJSON(String key = "");
Parametri di chiamata:
- key: Stringa, non utilizzata
Risultati restituiti:
- Value, restituisce un valore contenente JSON serializzabile