107 votes

Comment créer des threads dans nodejs

Existe-t-il un moyen de créer des threads pour exécuter plusieurs méthodes à la fois ?

De cette façon, si une méthode échoue entre-temps, tous les autres threads seront tués.

106voto

Brian Points 634

Nouvelle réponse : Alors que node.js n'avait pas la possibilité d'utiliser le threading de manière native, cette possibilité a été ajoutée depuis. Voir https://nodejs.org/api/worker_threads.html pour les détails.

Ancienne réponse : Chaque processus node.js est mono-threaded par conception. Par conséquent, pour obtenir des threads multiples, vous devez avoir plusieurs processus (comme d'autres posters l'ont souligné, il existe également des bibliothèques que vous pouvez lier et qui vous donneront la possibilité de travailler avec des threads dans Node, mais cette capacité n'existe pas sans ces bibliothèques. Voir la réponse de Shawn Vincent faisant référence à https://github.com/audreyt/node-webworker-threads )

Vous pouvez lancer des processus enfants à partir de votre processus principal, comme indiqué ici dans la documentation de node.js : http://nodejs.org/api/child_process.html . Les exemples sont assez bons sur cette page et sont assez simples.

Votre processus parent peut alors surveiller l'événement de fermeture de n'importe quel processus qu'il a lancé et peut ensuite forcer la fermeture des autres processus que vous avez lancés pour obtenir le type de stratégie d'arrêt unique dont vous parlez.

Voir aussi : Node.js sur les machines multi-cœurs

34voto

Shawn Vincent Points 501

Il existe également au moins une bibliothèque permettant de faire du threading natif à partir de Node.js : node-webworker-threads.

https://github.com/audreyt/node-webworker-threads

Il s'agit essentiellement de la mise en œuvre de la API du navigateur Web Worker pour node.js.

26voto

user158 Points 592

Mise à jour 2 :

Depuis Node.js 12 LTS Fils de travail son stable .


Mise à jour 1 :

Du nœud v11.7.0 vous n'avez pas besoin d'utiliser --experimental-worker drapeau.

Note de publication : https://nodejs.org/en/blog/release/v11.7.0/


A partir de Node 10.5, le support du multi threading est maintenant disponible. mais c'est expérimental . J'espère que cela deviendra bientôt stable.

Consultez les ressources suivantes :

10voto

shmuli Points 423

Vous pouvez obtenir le multithreading en utilisant Napa.js.

https://github.com/Microsoft/napajs

"Napa.js est un runtime JavaScript multithreadé construit sur V8, qui a été conçu à l'origine pour développer des services hautement itératifs avec des performances non compromises dans Bing. Au fur et à mesure de son évolution, nous trouvons utile de compléter Node.js dans les tâches liées au CPU, avec la possibilité d'exécuter JavaScript dans plusieurs isolats V8 et de communiquer entre eux. Napa.js est exposé en tant que module Node.js, mais il peut également être intégré dans un processus hôte sans dépendance vis-à-vis de Node.js."

7voto

Heinrich Ulbricht Points 6425

J'avais besoin réel le multithreading dans Node.js et ce qu'il faut en faire a fonctionné pour moi était le fils paquet. Il crée un autre processus ayant sa propre boucle de messages Node.js, afin qu'ils ne se bloquent pas mutuellement. L'installation est facile et la documentation vous permet d'être rapidement opérationnel. Votre programme principal et les travailleurs peuvent communiquer dans les deux sens et les "threads" des travailleurs peuvent être tués si nécessaire.

Comme le multithreading et Node.js est un sujet compliqué et largement discuté, il a été assez difficile de trouver un paquet qui fonctionne pour mon exigence spécifique. Pour mémoire, ces ne fonctionne pas pour moi :

  • petit travailleur a permis la création de travailleurs, mais ils semblaient partager la même boucle de messages (mais il se peut que j'aie fait quelque chose de mal ). fils avait plus de documentation, ce qui me donnait confiance vraiment utilisait plusieurs processus, donc j'ai continué jusqu'à ce que ça marche)
  • webworker-threads n'a pas permis require -les modules de travail dont j'avais besoin

Et pour ceux qui se demandent pourquoi j'avais besoin réel multithreading : Pour une application impliquant le Raspberry Pi et les interruptions. Un thread gère ces interruptions et un autre s'occupe du stockage des données (et plus encore).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X