Objeto objeto incorporado

Evento de objeto

El módulo de eventos proporciona un objeto de evento para operaciones colaborativas de datos compartidos. Permite operaciones síncronas entre múltiples fibras (corrutinas) para multitarea cooperativa. El objeto de evento tiene tres métodos: esperar, pulsar y borrar. El método de espera bloqueará la fibra actual hasta que se active el evento, el método de pulso activará todas las fibras que esperan el evento y el método de borrado restablecerá el indicador de evento. a falso mediante el usocoroutine.EventMódulos, los desarrolladores pueden controlar la secuencia de ejecución y el intercambio de datos entre fibras para implementar una lógica empresarial compleja.

Por ejemplo, supongamos que necesitamos compartir datos entre dos fibras, pero su orden de ejecución es incierto. Puede controlar el orden de ejecución de las fibras a través de un objeto de evento para asegurarse de que una fibra se ejecute antes de que se active la otra fibra.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
const coroutine = require('coroutine'); var evt = new coroutine.Event(); coroutine.start(function() { console.log('[1] wait for event'); evt.wait(); console.log('[1] receive event'); }); coroutine.start(function() { loop: for (var i = 0; i < 10; i++) { console.log('[2] do some work'); if (i === 5) { evt.pulse(); } coroutine.sleep(1000); } });

En el ejemplo anterior, creamos un objeto de evento evt, usamos el método de espera en la fibra 1 para esperar a que se active el evento y activamos el evento en la fibra 2 a través del método de pulso, cuando i es igual a 5, la fibra 2 activa el evento. event , la supervisión de eventos activa la Fibra 1 y continúa ejecutándose. En este proceso no se utilizan bloqueos u otras herramientas de sincronización entre las dos fibras, pero garantizan la sincronización de datos a nivel de fibra.

relación de herencia

Constructor

Event

constructor de objetos de eventos

1
new Event(Boolean value = false);

Parámetros de llamada:

  • value: Booleano, especifique si desea esperar, espere verdadero, el valor predeterminado es falso

función miembro

isSet

Determinar si el objeto de evento es verdadero

1
Boolean Event.isSet();

resultado devuelto:

  • Boolean, devuelve verdadero si el evento es verdadero

set

Active el evento (cambie el estado del evento a verdadero) y llame a pulse()

1
Event.set();

pulse

Activar todas las fibras esperando este evento

1
Event.pulse();

clear

Restablecer evento (cambiar el estado del evento a falso)

1
Event.clear();

wait

esperar un evento

1
Event.wait();

acquire

adquirir la propiedad de la cerradura

1
Boolean Event.acquire(Boolean blocking = true);

Parámetros de llamada:

  • blocking: Booleano, especifique si esperar, si es verdadero, espere, el valor predeterminado es verdadero

resultado devuelto:

  • Boolean, devuelve si el bloqueo se ha adquirido con éxito, verdadero significa que el bloqueo se ha adquirido con éxito

El método de adquisición se usa para adquirir la propiedad del candado, y este método devuelve verdadero inmediatamente cuando el candado está en un estado adquirible.

Cuando no se puede adquirir el bloqueo y el bloqueo es verdadero, la fibra actual entra en estado latente. Cuando otras fibras liberan el bloqueo, este método devuelve verdadero.

Cuando el bloqueo no está disponible y el bloqueo es falso, el método devuelve falso.


release

liberar bloqueo de propiedad

1
Event.release();

Este método libera la propiedad del candado o arroja un error si la fibra actual no posee el candado.


count

Consultar el número actual de tareas en espera

1
Integer Event.count();

resultado devuelto:

  • Integer, devuelve el número de tareas

toString

Devuelve la representación de cadena del objeto, generalmente devuelve "[Objeto nativo]", el objeto se puede volver a implementar de acuerdo con sus propias características

1
String Event.toString();

resultado devuelto:

  • String, devuelve una representación de cadena del objeto

toJSON

Devuelve la representación en formato JSON del objeto, generalmente devuelve una colección de propiedades legibles definidas por el objeto

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

Parámetros de llamada:

  • key: Cadena, no utilizada

resultado devuelto:

  • Value, que devuelve un valor serializable JSON