Coroutine du module
Module de contrôle de concurrence
coroutine
Le module fournit une fiber
API pour contrôler l'ordre d'exécution. Il permet aux développeurs de basculer manuellement fiber
, permettant le multitâche collaboratif. coroutine
Une fonction importante du module est sleep
la fonction qui permet au fiber
module en cours d'exécution d'abandonner le processeur et de laisser les autres fiber
modules s'exécuter.
Voici un exemple de code simple qui montre comment utiliser coroutine
le module :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16const coroutine = require('coroutine');
function foo() {
console.log('start foo');
coroutine.sleep(1000); // enter sleep mode
console.log('end foo');
}
function bar() {
console.log('start bar');
coroutine.sleep(2000);
console.log('end bar');
}
coroutine.start(foo);
coroutine.start(bar);
Dans le code ci-dessus, nous définissons deux fonctions foo
, bar
puis utilisons coroutine.start
la fonction pour démarrer les deux fiber
. Dans chacun fiber
, nous utilisons coroutine.sleep
la fonction pour libérer le CPU et laisser les autres fiber
fonctionner.
objet
Lock
verrouiller l'objet, voirLock
1Lock coroutine.Lock;
Semaphore
objet sémaphore, voirSemaphore
1Semaphore coroutine.Semaphore;
Condition
objet variable de condition, voirCondition
1Condition coroutine.Condition;
Event
objet événement, voirEvent
1Event coroutine.Event;
Worker
Objet de travail de thread indépendant, voirWorker
1Worker coroutine.Worker;
fonction statique
start
Démarre une fibre et renvoie l'objet fibre
1
2static Fiber coroutine.start(Function func,
...args);
Paramètres d'appel :
- func: Fonction, précise la fonction exécutée par la fibre
- args: ..., une séquence variadique d'arguments qui sera transmise à la fonction au sein de la fibre
Résultats de retour :
- Fiber, renvoie l'objet fibre
parallel
Exécuter un ensemble de fonctions en parallèle et attendre le retour
1
2static Array coroutine.parallel(Array funcs,
Integer fibers = -1);
Paramètres d'appel :
- funcs: Tableau, tableau de fonctions exécutées en parallèle
- fibers: Nombre entier, limite le nombre de fibres simultanées, la valeur par défaut est -1, active le même nombre de fibres que les fonctions
Résultats de retour :
- Array, renvoie un tableau de résultats d'exécution de fonction
Exécuter une fonction en parallèle pour traiter un ensemble de données et attendre le retour
1
2
3static Array coroutine.parallel(Array datas,
Function func,
Integer fibers = -1);
Paramètres d'appel :
- datas: Array, tableau de données pour une exécution parallèle
- func: Fonction, fonction exécutée en parallèle
- fibers: Nombre entier, limite le nombre de fibres simultanées, la valeur par défaut est -1, active le même nombre de fibres que les données
Résultats de retour :
- Array, renvoie un tableau de résultats d'exécution de fonction
Exécuter une fonction plusieurs fois en parallèle et attendre le retour
1
2
3static Array coroutine.parallel(Function func,
Integer num,
Integer fibers = -1);
Paramètres d'appel :
- func: Fonction, le nombre de fonctions exécutées en parallèle
- num: Entier, nombre de tâches répétées
- fibers: Nombre entier, limite le nombre de fibres simultanées, la valeur par défaut est -1, active le même nombre de fibres que les fonctions
Résultats de retour :
- Array, renvoie un tableau de résultats d'exécution de fonction
Exécuter un ensemble de fonctions en parallèle et attendre le retour
1static Array coroutine.parallel(...funcs);
Paramètres d'appel :
- funcs: ..., un ensemble de fonctions exécutées en parallèle
Résultats de retour :
- Array, renvoie un tableau de résultats d'exécution de fonction
current
Renvoie la fibre actuelle
1static Fiber coroutine.current();
Résultats de retour :
- Fiber, l'objet fibre actuel
sleep
Mettre en pause la fibre actuelle pendant la durée spécifiée
1static coroutine.sleep(Integer ms = 0) async;
Paramètres d'appel :
- ms: Entier, spécifie le temps de pause, en millisecondes, la valeur par défaut est 0, c'est-à-dire que l'opération reprendra immédiatement lorsqu'il y aura du temps.
propriétés statiques
fibers
Tableau, renvoie tous les tableaux de fibres en cours d'exécution
1static readonly Array coroutine.fibers;
spareFibers
Entier, requête et mise au reposFiberQuantité : lorsque la gigue du serveur est importante, l'inactivité peut être augmentée de manière appropriéeFiberquantité. La valeur par défaut est 256
1static Integer coroutine.spareFibers;
vmid
Entier, interrogez le courantvmnuméro de série
1static readonly Integer coroutine.vmid;
loglevel
Entier, modifiez et interrogez cecivmLe niveau de sortie est utilisé pour filtrer les informations de sortie. La valeur par défaut estconsole.NOTSET, affiche tout
1static Integer coroutine.loglevel;