La technologie sous-jacente soutenant Java Nio et Nodejs
Comme nous le savons tous, un certain support pour Java Nio et Nio2 a été ajouté aux versions récentes de Java. Dans le même temps, l'un des avantages les plus appréciés de la pile technologique NodeJS est son IO haute performance. Donc, le sujet dont nous allons discuter aujourd'hui est les technologies sous-jacentes qui soutiennent ces technologies.
Une question à poser avant de commencer est:
Pourquoi Nodejs et Java Nio2 n'apparaissent-ils plus tôt?
Réponse: Je pense personnellement que la technologie de soutien sous-jacente n'est pas encore mature.
Alors, que signifie la technologie sous-jacente? Oui, je pense que beaucoup de gens ont deviné que c'est la technologie du système d'exploitation. Les deux concepts proposés dans cet article, Java Nio2 et NodeJS, sont tous des technologies de l'état d'utilisateur ou des technologies de couches d'application, et ces technologies de couche d'application s'exécutent sur le système d'exploitation. Dans le même temps, avec l'avancement du système d'exploitation, les modèles de programmation qui peuvent être pris en charge sont également plus riches. On peut dire que ces deux technologies sont complètement évoluées pour appliquer les dividendes apportés par les progrès du système d'exploitation. D'une manière générale, la technologie qui bénéficie d'abord de ce bonus doit être C / C ++, car la plupart des dernières avancées du système d'exploitation fournissent des appels système, et C / C ++ est le plus pratique pour appliquer ces appels système, mais il est également le plus complexe. Afin d'obtenir les mêmes performances, d'autres plates-formes doivent constamment évoluer et emballer afin que les utilisateurs puissent utiliser ces dividendes. Une fois que cette plate-forme stagne et met à jour, il est temps que cette plate-forme baisse. Plus il est pratique de résumer, plus il est amical pour l'utilisateur, et plus il peut l'utiliser de personnes. Bien que de nombreuses personnes puissent écrire rapidement du code en fonction de ces plateformes, elles ne comprennent souvent pas l'essence car elles ne comprennent essentiellement pas les motivations et les principes de ces technologies. Les technologies dont nous discutons ci-dessous sont les technologies sous-jacentes liées à ces deux technologies.
Peu importe la conception du système d'exploitation, les 5 modèles IO suivants sont essentiels.
1. Bloquer des E / S
2. E / S non bloquant
3. Multiplexage d'E / S (sélection, sondage et epoll)
4. E / S du lecteur de signaux (Sigio)
5. E / S asynchrone (les fonctions POSIX AIO_)
1. Bloquer des E / S
Comme le montre la figure, l'avantage de ce modèle IO est qu'il est simple à programmer et est également l'un des premiers modèles IO pris en charge par le système d'exploitation. L'inconvénient est que le système appelle l'exécution de threads dynamiques des utilisateurs de blocs, ce qui entraîne un temps de processeur gaspillé et une faible efficacité IO.
2. E / S non bloquant
Comme le montre la figure, une amélioration de ce modèle IO est que l'IO n'est pas bloquant, mais il nécessite un sondage long, qui gaspille également les cycles d'horloge du processeur.
3. Multiplexage d'E / S (sélection, sondage et epoll)
Comme le montre la figure, ce modèle IO est le modèle IO le plus stable fourni par OS aujourd'hui. La plupart des applications grand public sont construites sur ce modèle IO, telles que NodeJS. Cependant, ces plates-formes ajoutent souvent une couche d'encapsulation à ce modèle pour prendre directement AIO.
4. E / S du lecteur de signaux (Sigio)
Comme le montre la figure, les données enregistrent que ce modèle IO n'a aucun avantage de performance dans le modèle 3 de comparaison et est rarement utilisé par les concepteurs en raison de l'instabilité dans la prise en charge du système.
5. E / S asynchrone (les fonctions POSIX AIO_)
Comme le montre la figure, ce modèle IO est l'AIO le plus parfait, et le modèle de programmation est également le plus simple, mais il y a très peu d'OSO qui peuvent parfaitement soutenir le modèle. Les informations en ligne montrent que Linux fait des efforts à cet égard. Une fois que le système d'exploitation a progressé dans cet aspect, le cadre de programmation, la plate-forme et le modèle de programmation peuvent encore être très simplifiés.
Bien que ce modèle soit rarement pris en charge par le système d'exploitation, cela ne signifie pas qu'il n'y a plus de modèle AIO maintenant. De nombreux cadres ont fait cet aspect et simulé AIO en mode utilisateur, permettant aux utilisateurs de prêter plus d'attention au code logique métier.
6. Asynchrone synchrone, blocage et non bloquant
Les synchrones et asynchrones sont destinés à l'interaction entre l'application et le noyau. Les données sont lues, puis le retour est synchrone, et le retour est asynchrone. Le blocage et le non-blocage sont destinés aux processus et aux threads. Le thread de lecture ou d'écriture attend en mode de blocage, plutôt qu'en mode de blocage, le thread de lecture ou d'écriture renvoie immédiatement une valeur d'état.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.