Trabajador de objetos
El objeto Worker es un objeto utilizado para crear subprocesos secundarios, que se pueden crear y procesar en el programa. Un objeto Worker puede entenderse como un proceso de JavaScript que se ejecuta en un hilo diferente al hilo principal. El trabajador no comparte memoria con el hilo principal ni bloquea el hilo principal, es un método de programación asincrónico convencional.
El constructor del objeto Trabajador es el siguiente:
1new Worker(String path, Object opts = {})
en,pathEl parámetro especifica la ruta del archivo JavaScript del nuevo hilo. Por ejemplo, puedes escribir un archivo work.js con el siguiente contenido:
1
2
3
4const {
Worker
} = require('worker_threads');
console.log('Hi from worker');
En el programa principal, ejecute work.js con el siguiente código:
1
2
3
4const {
Worker
} = require('worker_threads');
const worker = new Worker('path/to/work.js');
Después de ejecutarlo, puede ver el resultado "Hola del trabajador" en la consola del programa principal.
En el siguiente ejemplo, supongamos que tenemos un cálculo de larga duración y queremos ponerlo en otro hilo para procesarlo sin que este cálculo nos bloquee en el hilo principal. El código se muestra a continuación:
Hilo 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');
En este ejemplo, creamos un hilo de trabajo a través del constructor del objeto Worker para procesar el cálculo de la secuencia de Fibonacci. El hilo principal pasa datos al hilo de trabajo a través del método postMessage () y obtiene los resultados del procesamiento a través del evento onmessage. . Al mismo tiempo, el hilo principal muestra el mensaje "todavía funciona" para demostrar que esta tarea informática ha sido "delegada" al hilo de trabajo y puede continuar procesando otras cosas.
El estilo del código del hilo de trabajo es el siguiente:
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);
}
En el hilo de trabajo, escuchamos los mensajes enviados por el hilo principal a través del parámetro de entrada postMessage(), calculamos la secuencia de Fibonacci especificada y enviamos los resultados del cálculo al hilo principal a través del método Master.postMessage().
Este es el ejemplo de Worker más básico. Cuando se desarrolla usando objetos Worker, el hilo principal y el hilo de trabajo son completamente asincrónicos. Cada objeto de Worker es un hilo separado. El objeto de Worker instanciado en el hilo principal no generará ningún bloque.
relación de herencia
Constructor
Worker
Constructor de objetos de trabajo
1
2new Worker(String path,
Object opts = {});
Parámetros de llamada:
- path: Cadena, especifica el script de entrada del trabajador, solo acepta rutas absolutas
- opts: Objeto, opción de construcción, aún no admitido
propiedades estáticas
defaultMaxListeners
Entero, el número máximo global predeterminado de oyentes
1static Integer Worker.defaultMaxListeners;
propiedades de miembros
onload
La función, la consulta y el enlace aceptan el evento de mensaje de carga, que es equivalente a on("load", func);
1Function Worker.onload;
onmessage
La función, la consulta y el enlace aceptan eventos de mensajes postMessage, equivalentes a on("message", func);
1Function Worker.onmessage;
onerror
La función, la consulta y el enlace aceptan eventos de mensajes de error, equivalentes a on("error", func);
1Function Worker.onerror;
función miembro
postMessage
Enviar un mensaje al Maestro o Trabajador,
1Worker.postMessage(Value data);
Parámetros de llamada:
- data: Valor, especifica el contenido del mensaje enviado
on
Vincular un controlador de eventos al objeto
1
2Object Worker.on(String ev,
Function func);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
- func: Función, especifique la función de procesamiento de eventos
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Vincular un controlador de eventos al objeto
1Object Worker.on(Object map);
Parámetros de llamada:
- map: Objeto, especifica la relación de mapeo de eventos, el nombre del atributo del objeto se usará como nombre del evento y el valor del atributo se usará como función de procesamiento de eventos.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
addListener
Vincular un controlador de eventos al objeto
1
2Object Worker.addListener(String ev,
Function func);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
- func: Función, especifique la función de procesamiento de eventos
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Vincular un controlador de eventos al objeto
1Object Worker.addListener(Object map);
Parámetros de llamada:
- map: Objeto, especifica la relación de mapeo de eventos, el nombre del atributo del objeto se usará como nombre del evento y el valor del atributo se usará como función de procesamiento de eventos.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
prependListener
Vincular un controlador de eventos al origen del objeto
1
2Object Worker.prependListener(String ev,
Function func);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
- func: Función, especifique la función de procesamiento de eventos
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Vincular un controlador de eventos al origen del objeto
1Object Worker.prependListener(Object map);
Parámetros de llamada:
- map: Objeto, especifica la relación de mapeo de eventos, el nombre del atributo del objeto se usará como nombre del evento y el valor del atributo se usará como función de procesamiento de eventos.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
once
Vincula un controlador de eventos de una sola vez al objeto. El controlador de eventos de una sola vez solo se activará una vez.
1
2Object Worker.once(String ev,
Function func);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
- func: Función, especifique la función de procesamiento de eventos
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Vincula un controlador de eventos de una sola vez al objeto. El controlador de eventos de una sola vez solo se activará una vez.
1Object Worker.once(Object map);
Parámetros de llamada:
- map: Objeto, especifica la relación de mapeo de eventos, el nombre del atributo del objeto se usará como nombre del evento y el valor del atributo se usará como función de procesamiento de eventos.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
prependOnceListener
Vincular un controlador de eventos al origen del objeto
1
2Object Worker.prependOnceListener(String ev,
Function func);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
- func: Función, especifique la función de procesamiento de eventos
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Vincular un controlador de eventos al origen del objeto
1Object Worker.prependOnceListener(Object map);
Parámetros de llamada:
- map: Objeto, especifica la relación de mapeo de eventos, el nombre del atributo del objeto se usará como nombre del evento y el valor del atributo se usará como función de procesamiento de eventos.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
off
Desasignar una función de la cola de procesamiento de objetos
1
2Object Worker.off(String ev,
Function func);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
- func: Función, especifique la función de procesamiento de eventos
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Cancelar todas las funciones en la cola de procesamiento de objetos
1Object Worker.off(String ev);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Desasignar una función de la cola de procesamiento de objetos
1Object Worker.off(Object map);
Parámetros de llamada:
- map: Objeto, especifica la relación de mapeo de eventos, el nombre del atributo del objeto se usa como nombre del evento y el valor del atributo se usa como función de procesamiento de eventos.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
removeListener
Desasignar una función de la cola de procesamiento de objetos
1
2Object Worker.removeListener(String ev,
Function func);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
- func: Función, especifique la función de procesamiento de eventos
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Cancelar todas las funciones en la cola de procesamiento de objetos
1Object Worker.removeListener(String ev);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Desasignar una función de la cola de procesamiento de objetos
1Object Worker.removeListener(Object map);
Parámetros de llamada:
- map: Objeto, especifica la relación de mapeo de eventos, el nombre del atributo del objeto se usa como nombre del evento y el valor del atributo se usa como función de procesamiento de eventos.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
removeAllListeners
Cancela todos los oyentes de todos los eventos de la cola de procesamiento del objeto. Si se especifica un evento, elimina todos los oyentes del evento especificado.
1Object Worker.removeAllListeners(String ev);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
Cancela todos los oyentes de todos los eventos de la cola de procesamiento del objeto. Si se especifica un evento, elimina todos los oyentes del evento especificado.
1Object Worker.removeAllListeners(Array evs = []);
Parámetros de llamada:
- evs: Matriz, especifique el nombre del evento
Resultados de devolución:
- Object, devuelve el objeto de evento en sí para facilitar las llamadas en cadena
setMaxListeners
El límite predeterminado en la cantidad de oyentes, solo por compatibilidad
1Worker.setMaxListeners(Integer n);
Parámetros de llamada:
- n: Entero, especifica el número de eventos
getMaxListeners
Obtiene el número límite predeterminado de oyentes, solo por compatibilidad
1Integer Worker.getMaxListeners();
Resultados de devolución:
- Integer, devuelve la cantidad límite predeterminada
listeners
Consultar la matriz de escucha para el evento especificado del objeto.
1Array Worker.listeners(String ev);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
Resultados de devolución:
- Array, devuelve la matriz de escucha para el evento especificado
listenerCount
Consultar el número de oyentes para el evento especificado del objeto.
1Integer Worker.listenerCount(String ev);
Parámetros de llamada:
- ev: Cadena, especifica el nombre del evento.
Resultados de devolución:
- Integer, devuelve el número de oyentes para el evento especificado
Consultar el número de oyentes para el evento especificado del objeto.
1
2Integer Worker.listenerCount(Value o,
String ev);
Parámetros de llamada:
- o: Valor, especifica el objeto de la consulta.
- ev: Cadena, especifica el nombre del evento.
Resultados de devolución:
- Integer, devuelve el número de oyentes para el evento especificado
eventNames
Nombre del evento del oyente de consultas
1Array Worker.eventNames();
Resultados de devolución:
- Array, devuelve una serie de nombres de eventos
emit
Activar activamente un evento
1
2Boolean Worker.emit(String ev,
...args);
Parámetros de llamada:
- ev: Cadena, nombre del evento
- args: ..., los parámetros del evento se pasarán a la función de procesamiento de eventos
Resultados de devolución:
- Boolean, devuelve el estado del activador del evento, devuelve verdadero si hay un evento de respuesta; de lo contrario, devuelve falso
toString
Devuelve la representación de cadena del objeto. Generalmente, se devuelve "[Objeto nativo]". El objeto se puede volver a implementar de acuerdo con sus propias características.
1String Worker.toString();
Resultados de devolución:
- String, devuelve la representación de cadena del objeto
toJSON
Devuelve una representación en formato JSON del objeto, que generalmente devuelve una colección de propiedades legibles definidas por el objeto.
1Value Worker.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
Resultados de devolución:
- Value, devuelve un valor que contiene JSON serializable