ObjetWorker
L'objet Worker est un objet utilisé pour créer des threads enfants, qui peuvent être créés et traités dans le programme. Un objet Worker peut être compris comme un processus JavaScript qui s'exécute dans un thread différent du thread principal. Worker ne partage pas de mémoire avec le thread principal et ne bloque pas le thread principal.Il s'agit d'une méthode de programmation asynchrone courante.
Le constructeur de l'objet Worker est le suivant :
1new Worker(String path, Object opts = {})
dans,pathLe paramètre spécifie le chemin du fichier JavaScript du nouveau thread. Par exemple, vous pouvez écrire un fichier work.js avec le contenu suivant :
1
2
3
4const {
Worker
} = require('worker_threads');
console.log('Hi from worker');
Dans le programme principal, exécutez work.js avec le code suivant :
1
2
3
4const {
Worker
} = require('worker_threads');
const worker = new Worker('path/to/work.js');
Après l'exécution, vous pouvez voir la sortie "Salut du travailleur" sur la console du programme principal.
Dans l'exemple suivant, supposons que nous ayons un calcul de longue durée et que nous souhaitions le placer dans un autre thread pour le traiter sans être bloqué par ce calcul dans le thread principal. le code s'affiche comme ci-dessous :
Fil principal :
1
2
3
4
5
6
7
8
9
10
11
12const {
Worker
} = require('worker_threads');
// create a worker thread
const fib = new Worker(__dirname + '/fib-worker.js');
// receive the result from the worker thread
fib.onmessage = (ev) => {
console.log('result: ', ev.data);
};
fib.postMessage(40);
console.log('main thread still working');
Dans cet exemple,nous créons un thread de travail via le constructeur de l'objet Worker pour traiter le calcul de la séquence de Fibonacci. Le thread principal transmet les données au thread de travail via la méthode postMessage() et obtient les résultats du traitement via l'événement onmessage. . Dans le même temps, le thread principal affiche le message « toujours en cours de travail » pour prouver que cette tâche informatique a été « déléguée » au thread de travail et peut continuer à traiter d'autres choses.
Le style de code du thread de travail est le suivant :
1
2
3
4
5
6
7
8
9
10
11
12// fib-worker.js
Master.onmessage = (ev) => {
const n = ev.data;
const result = fib(n);
// Once the calculation has been completed, the result is sent back to the main thread.
Master.postMessage(result);
};
function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
Dans le thread de travail, nous avons écouté les messages envoyés par le thread principal via le paramètre d'entrée postMessage(), calculé la séquence de Fibonacci spécifiée et renvoyé les résultats du calcul au thread principal via la méthode Master.postMessage().
Il s'agit de l'exemple Worker le plus basique. Lors du développement à l'aide d'objets Worker, le thread principal et le thread de travail sont complètement asynchrones. Chaque objet Worker est un thread distinct. L'objet Worker instancié dans le thread principal ne générera aucun bloc.
relation d'héritage
Constructeur
Worker
Constructeur d'objet travailleur
1
2new Worker(String path,
Object opts = {});
Paramètres d'appel :
- path: String, spécifie le script d'entrée Worker, n'accepte que les chemins absolus
- opts: Objet, option de construction, pas encore pris en charge
propriétés statiques
defaultMaxListeners
Entier, le nombre maximum global d'auditeurs par défaut
1static Integer Worker.defaultMaxListeners;
propriétés des membres
onload
La fonction, la requête et la liaison acceptent l'événement de message de chargement, qui équivaut à on("load", func);
1Function Worker.onload;
onmessage
La fonction, la requête et la liaison acceptent les événements de message postMessage, équivalents à on("message", func);
1Function Worker.onmessage;
onerror
La fonction, la requête et la liaison acceptent les événements de message d'erreur, équivalents à on("error", func);
1Function Worker.onerror;
fonction membre
postMessage
Envoyer un message au maître ou au travailleur,
1Worker.postMessage(Value data);
Paramètres d'appel :
- data: Valeur, précise le contenu du message envoyé
on
Lier un gestionnaire d'événements à l'objet
1
2Object Worker.on(String ev,
Function func);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
- func: Fonction, spécifiez la fonction de traitement des événements
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Lier un gestionnaire d'événements à l'objet
1Object Worker.on(Object map);
Paramètres d'appel :
- map: Objet, spécifie la relation de mappage d'événement, le nom de l'attribut de l'objet sera utilisé comme nom d'événement et la valeur de l'attribut sera utilisée comme fonction de traitement d'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
addListener
Lier un gestionnaire d'événements à l'objet
1
2Object Worker.addListener(String ev,
Function func);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
- func: Fonction, spécifiez la fonction de traitement des événements
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Lier un gestionnaire d'événements à l'objet
1Object Worker.addListener(Object map);
Paramètres d'appel :
- map: Objet, spécifie la relation de mappage d'événement, le nom de l'attribut de l'objet sera utilisé comme nom d'événement et la valeur de l'attribut sera utilisée comme fonction de traitement d'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
prependListener
Lier un gestionnaire d'événements à l'origine de l'objet
1
2Object Worker.prependListener(String ev,
Function func);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
- func: Fonction, spécifiez la fonction de traitement des événements
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Lier un gestionnaire d'événements à l'origine de l'objet
1Object Worker.prependListener(Object map);
Paramètres d'appel :
- map: Objet, spécifie la relation de mappage d'événement, le nom de l'attribut de l'objet sera utilisé comme nom d'événement et la valeur de l'attribut sera utilisée comme fonction de traitement d'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
once
Liez un gestionnaire d'événement unique à l'objet.Le gestionnaire unique ne sera déclenché qu'une seule fois.
1
2Object Worker.once(String ev,
Function func);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
- func: Fonction, spécifiez la fonction de traitement des événements
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Liez un gestionnaire d'événement unique à l'objet.Le gestionnaire unique ne sera déclenché qu'une seule fois.
1Object Worker.once(Object map);
Paramètres d'appel :
- map: Objet, spécifie la relation de mappage d'événement, le nom de l'attribut de l'objet sera utilisé comme nom d'événement et la valeur de l'attribut sera utilisée comme fonction de traitement d'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
prependOnceListener
Lier un gestionnaire d'événements à l'origine de l'objet
1
2Object Worker.prependOnceListener(String ev,
Function func);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
- func: Fonction, spécifiez la fonction de traitement des événements
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Lier un gestionnaire d'événements à l'origine de l'objet
1Object Worker.prependOnceListener(Object map);
Paramètres d'appel :
- map: Objet, spécifie la relation de mappage d'événement, le nom de l'attribut de l'objet sera utilisé comme nom d'événement et la valeur de l'attribut sera utilisée comme fonction de traitement d'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
off
Désaffecter une fonction de la file d'attente de traitement des objets
1
2Object Worker.off(String ev,
Function func);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
- func: Fonction, spécifiez la fonction de traitement des événements
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Annuler toutes les fonctions dans la file d'attente de traitement des objets
1Object Worker.off(String ev);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Désaffecter une fonction de la file d'attente de traitement des objets
1Object Worker.off(Object map);
Paramètres d'appel :
- map: Objet, spécifie la relation de mappage d'événement, le nom de l'attribut de l'objet est utilisé comme nom d'événement et la valeur de l'attribut est utilisée comme fonction de traitement d'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
removeListener
Désaffecter une fonction de la file d'attente de traitement des objets
1
2Object Worker.removeListener(String ev,
Function func);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
- func: Fonction, spécifiez la fonction de traitement des événements
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Annuler toutes les fonctions dans la file d'attente de traitement des objets
1Object Worker.removeListener(String ev);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Désaffecter une fonction de la file d'attente de traitement des objets
1Object Worker.removeListener(Object map);
Paramètres d'appel :
- map: Objet, spécifie la relation de mappage d'événement, le nom de l'attribut de l'objet est utilisé comme nom d'événement et la valeur de l'attribut est utilisée comme fonction de traitement d'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
removeAllListeners
Annule tous les écouteurs de tous les événements de la file d'attente de traitement de l'objet. Si un événement est spécifié, supprime tous les écouteurs de l'événement spécifié.
1Object Worker.removeAllListeners(String ev);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
Annule tous les écouteurs de tous les événements de la file d'attente de traitement de l'objet. Si un événement est spécifié, supprime tous les écouteurs de l'événement spécifié.
1Object Worker.removeAllListeners(Array evs = []);
Paramètres d'appel :
- evs: Tableau, précisez le nom de l'événement
Résultats de retour :
- Object, renvoie l'objet événement lui-même pour faciliter les appels en chaîne
setMaxListeners
La limite par défaut du nombre d'auditeurs, pour des raisons de compatibilité uniquement
1Worker.setMaxListeners(Integer n);
Paramètres d'appel :
- n: Entier, précisez le nombre d'événements
getMaxListeners
Obtient le nombre limite par défaut d'écouteurs, pour des raisons de compatibilité uniquement
1Integer Worker.getMaxListeners();
Résultats de retour :
- Integer, renvoie la quantité limite par défaut
listeners
Interrogez le tableau d'écoute pour l'événement spécifié de l'objet
1Array Worker.listeners(String ev);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
Résultats de retour :
- Array, renvoie le tableau d'écoute pour l'événement spécifié
listenerCount
Interroger le nombre d'écouteurs pour l'événement spécifié de l'objet
1Integer Worker.listenerCount(String ev);
Paramètres d'appel :
- ev: String, spécifie le nom de l'événement
Résultats de retour :
- Integer, renvoie le nombre d'écouteurs pour l'événement spécifié
Interroger le nombre d'écouteurs pour l'événement spécifié de l'objet
1
2Integer Worker.listenerCount(Value o,
String ev);
Paramètres d'appel :
- o: Valeur, précise l'objet de la requête
- ev: String, spécifie le nom de l'événement
Résultats de retour :
- Integer, renvoie le nombre d'écouteurs pour l'événement spécifié
eventNames
Nom de l'événement d'écoute de requête
1Array Worker.eventNames();
Résultats de retour :
- Array, renvoie un tableau de noms d'événements
emit
Déclencher activement un événement
1
2Boolean Worker.emit(String ev,
...args);
Paramètres d'appel :
- ev: Chaîne, nom de l'événement
- args: ..., les paramètres de l'événement seront transmis à la fonction de traitement des événements
Résultats de retour :
- Boolean, renvoie l'état du déclencheur d'événement, renvoie vrai s'il y a un événement de réponse, sinon renvoie faux
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 Worker.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 Worker.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