Objet objet intégré

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 :

1
new 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 4
const { Worker } = require('worker_threads'); console.log('Hi from worker');

Dans le programme principal, exécutez work.js avec le code suivant :

1 2 3 4
const { 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 12
const { 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 2
new 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

1
static 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);

1
Function Worker.onload;

onmessage

La fonction, la requête et la liaison acceptent les événements de message postMessage, équivalents à on("message", func);

1
Function Worker.onmessage;

onerror

La fonction, la requête et la liaison acceptent les événements de message d'erreur, équivalents à on("error", func);

1
Function Worker.onerror;

fonction membre

postMessage

Envoyer un message au maître ou au travailleur,

1
Worker.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 2
Object 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

1
Object 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 2
Object 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

1
Object 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 2
Object 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

1
Object 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 2
Object 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.

1
Object 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 2
Object 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

1
Object 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 2
Object 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

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

1
Object 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 2
Object 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

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

1
Object 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é.

1
Object 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é.

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

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

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

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

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

1
Array Worker.eventNames();

Résultats de retour :

  • Array, renvoie un tableau de noms d'événements

emit

Déclencher activement un événement

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

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

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