Quelles sont les différences entre un système de serveur basé sur des événements et un système de serveur à thread?
- Node.js est un événement piloté par le I/O et C'est un seul thread serveur
agit sur les rappels et de ne jamais bloquer le thread principal.- Mais comment fait-il gérer les non-blocage I/O?
- si il n'est facile à gérer, pourquoi ne pas passer le fil à base système de gestion?
- Ne fonctionne pas les autres threads (derrière le seul event-driven fil) comme basé sur le thread ?
- si les autres threads moyenne des travailleurs(derrière événement piloté par thread) sont occupés, comment il peut encore gérer les tâches sans blocage?
- Basé sur le Thread modèle d'assigner une tâche à un fil et si il n'y a pas de
thread inactif, bloc de nouvelles tâches.- si un thread peut gérer de multiples tâches comme event-driven unique
thread qui gère tous les I/O sans blocage, pourquoi basé sur le thread
le système n'utilise pas cette tactique, sur la très fréquentée fils d'I/O sans
le blocage.
- si un thread peut gérer de multiples tâches comme event-driven unique
Je me demande quelles sont les différences (avantages/inconvénients) entre les évènements et basé sur le thread des systèmes de serveur.
source d'informationauteur erginduran
Vous devez vous connecter pour publier un commentaire.
La différence peut être décrite comme suit (avec une certaine simplification):
dans "thread" axé sur les exécutions, lorsqu'une demande arrive, un nouveau thread est créé et tout le traitement est fait dans ce thread.
dans "event driven" runtimes, lorsqu'une demande arrive, l'événement est distribué et gestionnaire de ramasser. Quand? Dans Node.js, il y a une "boucle" qui, en gros, passe en boucle sur tous les morceaux de code qui doivent être exécutés et exécute un par un. Afin que le gestionnaire va gérer l'événement une fois la boucle d'événement de l'invoque. La chose importante ici est que tous les gestionnaires sont appelés dans le même thread - la boucle d'événement de ne pas avoir un pool de threads à utiliser, il n'a qu'un seul thread.
Dans un "event driven" modèle, si un gestionnaire de prendre un temps très long à terminer (c'est à dire par le fait d'avoir un calcul intensif
for
boucle à l'intérieur), aucune autre demande sera traitée pendant ce temps, parce que l'événement de la boucle ne sera pas invoquer le gestionnaire suivant avant le cours se termine. Ce n'est généralement pas un problème en raison de la nature asynchrone de Javascript.D'autre part, dans le "fil" orienté modèle, si le maître prend beaucoup de temps, il ne sera pas blesser les autres fils, parce qu'ils peuvent s'exécuter en même temps de façon indépendante.
Malheureusement, la création d'un nouveau thread ajoute une surcharge, et si vous avez besoin de gérer des milliers de connexions simultanées, il pourrait devenir un fardeau. C'est pourquoi Node.js est considéré comme rapide - peu importe le nombre de connexions vous gérer, il n'y a qu'un seul thread Un. Vous avez juste besoin de faire un peu attention de ne pas bloquer dans l'un des gestionnaires de garder les choses en mouvement. Heureusement, la plupart du temps, il n'est pas facile à écrire le blocage de code JavaScript.
Il est également important de noter que l'écriture de code asynchrone est possible dans la plupart des moteurs d'exécution. Il est devenu le plus largement utilisé dans Node.js cependant, en raison de la nature de Javascript. Grâce à cela, pratiquement toutes les bibliothèques que vous utilisez dans le Nœud sera asynchrone.
Voir cet article (et les photos) pour une explication de la boucle d'événements.
Un Bien sûr, il n'est plus qu'à un fil dans Node.js processus, certains d'entre eux sont liés à des I/O. Mais votre application logique est géré en un seul fil.