Obxecto obxecto incorporado

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 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); } });

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

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

1
Boolean 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()

1
Event.set();

pulse

Activa todas as fibras á espera deste evento

1
Event.pulse();

clear

Restablecer evento (cambiar o estado do evento a falso)

1
Event.clear();

wait

esperar por un evento

1
Event.wait();

acquire

adquirir a propiedade da pechadura

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

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

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

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

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

Parámetros de chamada:

  • key: Cadena, non usada

devolver resultado:

  • Value, que devolve un valor serializable por JSON