Maison > interface Web > js tutoriel > le corps du texte

Comment Node.js, un environnement monothread, atteint-il l'évolutivité sur les systèmes multicœurs ?

Barbara Streisand
Libérer: 2024-11-07 02:38:02
original
345 Les gens l'ont consulté

How does Node.js, a single-threaded environment, achieve scalability on multi-core systems?

Node.js sur les ordinateurs multicœurs

La popularité actuelle de Node.js a soulevé des doutes quant au fait qu'il ne cible que des processus uniques et Les threads sont optimisés, alors comment s'adaptent-ils aux processeurs multicœurs et aux serveurs multi-CPU ?

Le monothreading limite-t-il vraiment les performances ?

Bien que les serveurs monothread soient assez rapides, sous une charge élevée, nous devons tirer pleinement parti des processeurs multicœurs. La parallélisation des tâches est une tendance actuelle dans l’accélération des applications.

Node.js combiné avec des multicœurs

Node.js s'adapte aux ordinateurs multicœurs. Il est implémenté via les méthodes suivantes :

1. Fractionnement des processus

Pour les tâches informatiques lourdes telles que l'encodage d'images, Node.js peut lancer des processus enfants ou fournir un support à autres processus de travail Envoyer un message. Dans cette conception, un thread gère le flux des événements, tandis que N processus effectuent des tâches de calcul lourdes, en utilisant pleinement les 15 autres processeurs.

2. Parallélisme multi-serveurs

Pour la mise à l'échelle des services Web, plusieurs serveurs Node.js doivent être exécutés sur un seul ordinateur, avec un cœur par serveur et un trafic de requêtes amorti. . Cela offre une excellente affinité CPU et fait évoluer le débit de manière presque linéaire à mesure que le nombre de cœurs augmente.

Utilisez le module cluster pour faire évoluer le débit du service Web

À partir de la version 6.0.X, Node.js inclut directement le module cluster, ce qui facilite sa configuration plusieurs nœuds Processus de travail pouvant écouter sur un seul port. Notez que ceci est différent de l'ancien module "cluster" learnboost disponible via npm.

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  http.Server(function(req, res) { ... }).listen(8000);
}
Copier après la connexion

Les processus de travail seront en compétition pour accepter de nouvelles connexions, et le processus le moins chargé a plus de chances de gagner. Cela fonctionne bien et adapte bien le débit sur les machines multicœurs.

Optimiser l'équilibrage de charge

En plus d'utiliser le module cluster, les étapes suivantes peuvent également contribuer à améliorer encore l'équilibrage de charge multicœur :

  • Dans Nginx ou les proxys Web tels qu'Apache, exécutez les services Node.js derrière eux pour effectuer la limitation de connexion, la réécriture d'URL, la diffusion de contenu statique et la proxy d'autres sous-services.
  • Redémarrez régulièrement les processus de travail. Pour les processus de longue durée, même de petites fuites de mémoire peuvent s'accumuler.
  • Configurer la collecte et la surveillance des journaux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!