Objeto incorporado

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:

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

En el programa principal, ejecute work.js con el siguiente código:

1 2 3 4
const { 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 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');

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 2
new 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

1
static 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);

1
Function Worker.onload;

onmessage

La función, la consulta y el enlace aceptan eventos de mensajes postMessage, equivalentes a on("message", func);

1
Function Worker.onmessage;

onerror

La función, la consulta y el enlace aceptan eventos de mensajes de error, equivalentes a on("error", func);

1
Function Worker.onerror;

función miembro

postMessage

Enviar un mensaje al Maestro o Trabajador,

1
Worker.postMessage(Value data);

Parámetros de llamada:

  • data: Valor, especifica el contenido del mensaje enviado

on

Vincular un controlador de eventos al objeto

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1
Array Worker.eventNames();

Resultados de devolución:

  • Array, devuelve una serie de nombres de eventos

emit

Activar activamente un evento

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

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

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

Parámetros de llamada:

  • key: Cadena, no utilizada

Resultados de devolución:

  • Value, devuelve un valor que contiene JSON serializable