ObjetoEvento
El módulo Event proporciona un objeto de evento para operaciones colaborativas de datos compartidos. Permite operaciones sincronizadas entre múltiples fibras (corrutinas) para lograr una 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 despertará todas las fibras que esperan el evento y el método de borrado restablecerá el indicador del evento a FALSO. mediante el usocoroutine.EventMódulo, 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 el 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 garantizar que una fibra se active antes de que se ejecute la otra. Eventos de fibra.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19const 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 usamos el método de pulso para activar el evento en la fibra 2. Cuando i es igual a 5, la fibra 2 activa el event. , la Fibra 1 se activa mediante la escucha de eventos y continúa la ejecución. En este proceso no se utilizan bloqueos ni otras herramientas de sincronización entre las dos fibras, pero aseguran la sincronización de datos a nivel de fibra.
relación de herencia
Constructor
Event
constructor de objetos de evento
1new Event(Boolean value = false);
Parámetros de llamada:
- value: Booleano, especifica si se debe esperar, esperar cuando sea verdadero, el valor predeterminado es falso
función miembro
isSet
Determinar si el objeto del evento es verdadero.
1Boolean Event.isSet();
Resultados de devolución:
- Boolean, si el evento es verdadero, devuelve verdadero
set
Active el evento (cambie el estado del evento a verdadero) y llame a pulse()
1Event.set();
pulse
Activa todas las fibras esperando este evento.
1Event.pulse();
clear
Restablecer evento (cambiar el estado del evento a falso)
1Event.clear();
wait
espera un evento
1Event.wait();
acquire
Obtener la propiedad de la cerradura
1Boolean Event.acquire(Boolean blocking = true);
Parámetros de llamada:
- blocking: Booleano, especifica si se debe esperar, esperar cuando sea verdadero, el valor predeterminado es verdadero
Resultados de devolución:
- Boolean, devuelve si el bloqueo se adquirió correctamente; verdadero indica que la adquisición se realizó correctamente.
El método de adquisición se utiliza para obtener la propiedad del candado. Cuando el candado está en estado adquirible, este método devuelve verdadero inmediatamente.
Cuando no se puede adquirir el bloqueo y el bloqueo es verdadero, la fibra actual entra en modo de suspensión. Cuando otras fibras liberan el bloqueo, este método devuelve verdadero.
Cuando no se puede adquirir el bloqueo y el bloqueo es falso, el método devuelve falso.
release
Liberar la propiedad de la cerradura
1Event.release();
Este método liberará la propiedad del candado o generará un error si la fibra actual no es propietaria del candado.
count
Consultar el número actual de tareas en espera.
1Integer Event.count();
Resultados de devolución:
- Integer, devuelve el número de tareas
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 Event.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 Event.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
Resultados de devolución:
- Value, devuelve un valor que contiene JSON serializable