ObjectWorker
O obxecto Worker é un obxecto usado para crear fíos fillos, que se poden crear e procesar no programa. Un obxecto Worker pódese entender como un proceso JavaScript que se executa nun fío diferente do fío principal. O traballador non comparte memoria co fío principal e non bloquea o fío principal. É un método de programación asíncrono convencional.
O construtor do obxecto Worker é o seguinte:
1new Worker(String path, Object opts = {})
en,pathO parámetro especifica a ruta do ficheiro JavaScript do novo fío. Por exemplo, pode escribir un ficheiro work.js co seguinte contido:
1
2
3
4const {
Worker
} = require('worker_threads');
console.log('Hi from worker');
No programa principal, executa work.js co seguinte código:
1
2
3
4const {
Worker
} = require('worker_threads');
const worker = new Worker('path/to/work.js');
Despois de executar, podes ver a saída "Ola do traballador" na consola do programa principal.
No seguinte exemplo, supoñamos que temos un cálculo de longa duración e queremos poñelo noutro fío para procesar sen que este cálculo nos bloquee no fío principal. código móstrase como a continuación:
Fío principal:
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');
Neste exemplo, creamos un fío de traballo a través do construtor do obxecto Worker para procesar o cálculo da secuencia de Fibonacci. O fío principal pasa datos ao fío de traballo a través do método postMessage() e obtén os resultados do procesamento a través do evento onmessage . Ao mesmo tempo, o fío principal mostra a mensaxe "aínda funcionando" para demostrar que esta tarefa informática foi "delegada" ao fío de traballo e pode continuar procesando outras cousas.
O estilo do código do fío de traballo é o seguinte:
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);
}
No fío de traballo, escoitamos as mensaxes enviadas polo fío principal a través do parámetro de entrada postMessage(), calculamos a secuencia de Fibonacci especificada e enviamos os resultados do cálculo de volta ao fío principal a través do método Master.postMessage().
Este é o exemplo de Worker máis básico. Cando se desenvolven usando obxectos Worker, o fío principal e o fío de traballo son completamente asíncronos. Cada obxecto Worker é un fío separado. O obxecto Worker instanciado no fío principal non xerará ningún bloque.
relación de herdanza
Construtor
Worker
Construtor de obxectos de traballo
1
2new Worker(String path,
Object opts = {});
Parámetros de chamada:
- path: Cadea, especifica o script de entrada de Worker, só acepta camiños absolutos
- opts: Obxecto, opción de construción, aínda non compatible
propiedades estáticas
defaultMaxListeners
Enteiro, o número máximo global predeterminado de oíntes
1static Integer Worker.defaultMaxListeners;
propiedades dos membros
onload
A función, a consulta e a vinculación aceptan o evento da mensaxe de carga, que é equivalente a on("load", func);
1Function Worker.onload;
onmessage
Función, consulta e vinculación aceptan eventos de mensaxes postMessage, equivalentes a on("mensaxe", func);
1Function Worker.onmessage;
onerror
Función, consulta e vinculación aceptan eventos de mensaxes de erro, equivalentes a on("error", func);
1Function Worker.onerror;
función de membro
postMessage
Envía unha mensaxe ao mestre ou ao traballador,
1Worker.postMessage(Value data);
Parámetros de chamada:
- data: Valor, especifica o contido da mensaxe enviada
on
Vincular un controlador de eventos ao obxecto
1
2Object Worker.on(String ev,
Function func);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
- func: Función, especifique a función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Vincular un controlador de eventos ao obxecto
1Object Worker.on(Object map);
Parámetros de chamada:
- map: Obxecto, especifica a relación de asignación de eventos, o nome do atributo do obxecto empregarase como nome do evento e o valor do atributo como función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
addListener
Vincular un controlador de eventos ao obxecto
1
2Object Worker.addListener(String ev,
Function func);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
- func: Función, especifique a función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Vincular un controlador de eventos ao obxecto
1Object Worker.addListener(Object map);
Parámetros de chamada:
- map: Obxecto, especifica a relación de asignación de eventos, o nome do atributo do obxecto empregarase como nome do evento e o valor do atributo como función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
prependListener
Vincular un controlador de eventos á orixe do obxecto
1
2Object Worker.prependListener(String ev,
Function func);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
- func: Función, especifique a función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Vincular un controlador de eventos á orixe do obxecto
1Object Worker.prependListener(Object map);
Parámetros de chamada:
- map: Obxecto, especifica a relación de asignación de eventos, o nome do atributo do obxecto empregarase como nome do evento e o valor do atributo como función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
once
Vincula un controlador de eventos único ao obxecto. O manejador único só se activará unha vez.
1
2Object Worker.once(String ev,
Function func);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
- func: Función, especifique a función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Vincula un controlador de eventos único ao obxecto. O manejador único só se activará unha vez.
1Object Worker.once(Object map);
Parámetros de chamada:
- map: Obxecto, especifica a relación de asignación de eventos, o nome do atributo do obxecto empregarase como nome do evento e o valor do atributo como función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
prependOnceListener
Vincular un controlador de eventos á orixe do obxecto
1
2Object Worker.prependOnceListener(String ev,
Function func);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
- func: Función, especifique a función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Vincular un controlador de eventos á orixe do obxecto
1Object Worker.prependOnceListener(Object map);
Parámetros de chamada:
- map: Obxecto, especifica a relación de asignación de eventos, o nome do atributo do obxecto empregarase como nome do evento e o valor do atributo como función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
off
Desasignar unha función da cola de procesamento de obxectos
1
2Object Worker.off(String ev,
Function func);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
- func: Función, especifique a función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Cancela todas as funcións da cola de procesamento de obxectos
1Object Worker.off(String ev);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Desasignar unha función da cola de procesamento de obxectos
1Object Worker.off(Object map);
Parámetros de chamada:
- map: Obxecto, especifica a relación de asignación de eventos, o nome do atributo do obxecto úsase como nome do evento e o valor do atributo úsase como función de procesamento de eventos.
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
removeListener
Desasignar unha función da cola de procesamento de obxectos
1
2Object Worker.removeListener(String ev,
Function func);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
- func: Función, especifique a función de procesamento de eventos
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Cancela todas as funcións da cola de procesamento de obxectos
1Object Worker.removeListener(String ev);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Desasignar unha función da cola de procesamento de obxectos
1Object Worker.removeListener(Object map);
Parámetros de chamada:
- map: Obxecto, especifica a relación de asignación de eventos, o nome do atributo do obxecto úsase como nome do evento e o valor do atributo úsase como función de procesamento de eventos.
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
removeAllListeners
Cancela todos os oíntes de todos os eventos da cola de procesamento do obxecto. Se se especifica un evento, elimina todos os oíntes do evento especificado.
1Object Worker.removeAllListeners(String ev);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
Cancela todos os oíntes de todos os eventos da cola de procesamento do obxecto. Se se especifica un evento, elimina todos os oíntes do evento especificado.
1Object Worker.removeAllListeners(Array evs = []);
Parámetros de chamada:
- evs: Matriz, especifique o nome do evento
Resultados de devolución:
- Object, devolve o propio obxecto do evento para facilitar as chamadas en cadea
setMaxListeners
O límite predeterminado no número de oíntes, só para compatibilidade
1Worker.setMaxListeners(Integer n);
Parámetros de chamada:
- n: Número enteiro, especifique o número de eventos
getMaxListeners
Obtén o número límite predeterminado de oíntes, só para compatibilidade
1Integer Worker.getMaxListeners();
Resultados de devolución:
- Integer, devolve a cantidade límite predeterminada
listeners
Consulta a matriz de escoita para o evento especificado do obxecto
1Array Worker.listeners(String ev);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
Resultados de devolución:
- Array, devolve a matriz de escoita para o evento especificado
listenerCount
Consulta o número de oíntes para o evento especificado do obxecto
1Integer Worker.listenerCount(String ev);
Parámetros de chamada:
- ev: Cadea, especifica o nome do evento
Resultados de devolución:
- Integer, devolve o número de oíntes para o evento especificado
Consulta o número de oíntes para o evento especificado do obxecto
1
2Integer Worker.listenerCount(Value o,
String ev);
Parámetros de chamada:
- o: Valor, especifica o obxecto da consulta
- ev: Cadea, especifica o nome do evento
Resultados de devolución:
- Integer, devolve o número de oíntes para o evento especificado
eventNames
Consulta o nome do evento do oínte
1Array Worker.eventNames();
Resultados de devolución:
- Array, devolve unha matriz de nomes de eventos
emit
Activa un evento de forma activa
1
2Boolean Worker.emit(String ev,
...args);
Parámetros de chamada:
- ev: Cadea, nome do evento
- args: ..., os parámetros do evento pasaranse á función de procesamento de eventos
Resultados de devolución:
- Boolean, devolve o estado de activación do evento, devolve verdadeiro se hai un evento de resposta, se non, devolve falso
toString
Devolve a representación en cadea do obxecto. Polo xeral, devólvese "[Obxecto nativo]". O obxecto pódese volver implementar segundo as súas propias características.
1String Worker.toString();
Resultados de devolución:
- String, devolve a representación en cadea do obxecto
toJSON
Devolve unha representación en formato JSON do obxecto, devolvendo xeralmente unha colección de propiedades lexibles definidas polo obxecto.
1Value Worker.toJSON(String key = "");
Parámetros de chamada:
- key: Cadena, non usada
Resultados de devolución:
- Value, devolve un valor que contén JSON serializable