ObjetEvénement
Le module Événement fournit un objet événement pour les opérations collaboratives sur les données partagées. Il permet des opérations synchronisées entre plusieurs fibres (coroutines) pour réaliser un multitâche coopératif. L'objet événement a trois méthodes : attendre, pulser et effacer. La méthode d'attente bloquera la fibre actuelle jusqu'à ce que l'événement soit déclenché, la méthode d'impulsion réveillera toutes les fibres en attente de l'événement et la méthode d'effacement réinitialisera l'indicateur d'événement à FAUX. en utilisantcoroutine.EventModule, les développeurs peuvent contrôler la séquence d'exécution et le partage de données entre les fibres pour mettre en œuvre une logique métier complexe.
Par exemple, supposons que nous ayons besoin de partager des données entre deux fibres, mais que l'ordre de leur exécution soit incertain. Vous pouvez contrôler l'ordre d'exécution des fibres via un objet événement pour garantir qu'une fibre est déclenchée avant que l'autre ne soit exécutée. Événements de fibre.
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);
}
});
Dans l'exemple ci-dessus, nous avons créé un objet événement evt, utilisé la méthode wait dans la fibre 1 pour attendre que l'événement soit déclenché et utilisé la méthode pulse pour déclencher l'événement dans la fibre 2. Lorsque i est égal à 5, la fibre 2 déclenche le événement. , la fibre 1 est réveillée grâce à l'écoute d'événement et continue son exécution. Dans ce processus, aucun verrou ou autre outil de synchronisation n'est utilisé entre les deux fibres, mais ils assurent la synchronisation des données au niveau de la fibre.
relation d'héritage
Constructeur
Event
constructeur d'objet événementiel
1new Event(Boolean value = false);
Paramètres d'appel :
- value: Booléen, spécifie s'il faut attendre, attendre quand vrai, la valeur par défaut est faux
fonction membre
isSet
Déterminer si l'objet événement est vrai
1Boolean Event.isSet();
Résultats de retour :
- Boolean, si l'événement est vrai, renvoie vrai
set
Activez l'événement (changez le statut de l'événement en vrai) et appelez pulse()
1Event.set();
pulse
Activer toutes les fibres en attente de cet événement
1Event.pulse();
clear
Réinitialiser l'événement (changer le statut de l'événement sur false)
1Event.clear();
wait
attendre un événement
1Event.wait();
acquire
Devenez propriétaire de la serrure
1Boolean Event.acquire(Boolean blocking = true);
Paramètres d'appel :
- blocking: Booléen, spécifie s'il faut attendre, attendre quand vrai, la valeur par défaut est vrai
Résultats de retour :
- Boolean, indique si le verrou a été acquis avec succès, true indique une acquisition réussie.
La méthode d'acquisition est utilisée pour obtenir la propriété du verrou. Lorsque le verrou est dans l'état acquérable, cette méthode renvoie immédiatement true.
Lorsque le verrou ne peut pas être acquis et que le blocage est vrai, la fibre actuelle se met en veille. Lorsque d'autres fibres libèrent le verrou, cette méthode renvoie vrai.
Lorsque le verrou ne peut pas être acquis et que le blocage est faux, la méthode renvoie faux.
release
Libérer la propriété de la serrure
1Event.release();
Cette méthode libérera la propriété du verrou ou générera une erreur si la fibre actuelle ne possède pas le verrou.
count
Interroger le nombre actuel de tâches en attente
1Integer Event.count();
Résultats de retour :
- Integer, renvoie le nombre de tâches
toString
Renvoie la représentation sous forme de chaîne de l'objet. Généralement, "[Native Object]" est renvoyé. L'objet peut être réimplémenté en fonction de ses propres caractéristiques.
1String Event.toString();
Résultats de retour :
- String, renvoie la représentation sous forme de chaîne de l'objet
toJSON
Renvoie une représentation au format JSON de l'objet, renvoyant généralement une collection de propriétés lisibles définies par l'objet.
1Value Event.toJSON(String key = "");
Paramètres d'appel :
- key: Chaîne, non utilisée
Résultats de retour :
- Value, renvoie une valeur contenant du JSON sérialisable