Evento obxecto
O módulo Evento proporciona un obxecto de evento para operacións colaborativas de datos compartidos. Permite operacións sincrónicas entre varias fibras (corutinas) para a multitarea cooperativa. O obxecto do evento ten tres métodos: esperar, pulso e borrar. O método de espera bloqueará a fibra actual ata que se active o evento, o método de pulso espertará todas as fibras que agardan polo evento e o método de borrado restablecerá a bandeira do evento. a falso. mediante o usocoroutine.EventMódulos, os desenvolvedores poden controlar a secuencia de execución e o intercambio de datos entre fibras para implementar unha lóxica de negocio complexa.
Por exemplo, supoñamos que necesitamos compartir datos entre dúas fibras, pero a súa orde de execución é incerta. Podes controlar a orde de execución das fibras a través dun obxecto de evento para asegurarnos de que unha fibra se execute antes de que se active a outra.
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);
}
});
No exemplo anterior, creamos un obxecto de evento evt, usamos o método wait na fibra 1 para esperar a que se active o evento e activamos o evento na fibra 2 a través do método de pulso, cando i é igual a 5, a fibra 2 activa o evento , Fiber 1 é espertado pola monitorización de eventos e continúa executándose. Neste proceso, non se utilizan bloqueos nin outras ferramentas de sincronización entre as dúas fibras, pero garanten a sincronización dos datos a nivel de fibra.
relación de herdanza
Construtor
Event
constructor de obxectos de eventos
1new Event(Boolean value = false);
Parámetros de chamada:
- value: Booleano, especifique se desexa esperar, agardar a verdadeiro, o valor predeterminado é falso
función de membro
isSet
Determina se o obxecto do evento é verdadeiro
1Boolean Event.isSet();
devolver resultado:
- Boolean, devolve verdadeiro se o evento é verdadeiro
set
Activa o evento (cambia o estado do evento a verdadeiro) e chama a pulse()
1Event.set();
pulse
Activa todas as fibras á espera deste evento
1Event.pulse();
clear
Restablecer evento (cambiar o estado do evento a falso)
1Event.clear();
wait
esperar por un evento
1Event.wait();
acquire
adquirir a propiedade da pechadura
1Boolean Event.acquire(Boolean blocking = true);
Parámetros de chamada:
- blocking: Booleano, especifique se esperar, se é verdadeiro, esperar, o predeterminado é verdadeiro
devolver resultado:
- Boolean, devolve se o bloqueo foi adquirido con éxito, verdadeiro significa que o bloqueo foi adquirido con éxito
O método de adquisición utilízase para adquirir a propiedade do bloqueo, e este método devolve verdadeiro inmediatamente cando o bloqueo está nun estado adquirible.
Cando o bloqueo non se pode adquirir e o bloqueo é verdadeiro, a fibra actual entra en inactividade. Cando outras fibras liberan o bloqueo, este método devolve verdadeiro.
Cando o bloqueo non está dispoñible e o bloqueo é falso, o método devolve false.
release
liberar a propiedade do bloqueo
1Event.release();
Este método libera a propiedade do bloqueo ou xera un erro se a fibra actual non é propietaria do bloqueo.
count
Consulta o número actual de tarefas en espera
1Integer Event.count();
devolver resultado:
- Integer, devolve o número de tarefas
toString
Devolve a representación en cadea do obxecto, xeralmente devolve "[Obxecto nativo]", o obxecto pódese reimplementar segundo as súas propias características
1String Event.toString();
devolver resultado:
- String, devolve unha representación en cadea do obxecto
toJSON
Devolve a representación en formato JSON do obxecto, xeralmente devolve unha colección de propiedades lexibles definidas polo obxecto
1Value Event.toJSON(String key = "");
Parámetros de chamada:
- key: Cadena, non usada
devolver resultado:
- Value, que devolve un valor serializable por JSON