English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Soutenant la technologie de niveau inférieur de Java NIO et NodeJS
Il est bien connu que dans les versions récentes de Java, quelques fonctionnalités ont été ajoutées pour Java NIO, NIO2Le soutien, en même temps, l'un des avantages les plus loués du stack technique NodeJS est son IO haute performance, alors que nous allons discuter aujourd'hui des technologies de niveau inférieur qui soutiennent ces technologies.
Avant de commencer, une question doit être posée :
Pourquoi NodeJS et Java NIO2Pourquoi ne sont-ils pas apparus plus tôt ?
Réponse :Je pense que la technologie de soutien de niveau inférieur n'est pas encore mûre.
Alors, que signifie la technologie de niveau inférieur ? Oui, je pense que beaucoup de gens ont deviné, c'est la technologie du système d'exploitation. Les deux concepts proposés dans cet article sont Java NIO2et NodeJS ne font pas exception, elles sont toutes des technologies en mode utilisateur ou des technologies de couche application, et ces technologies de couche application s'exécutent sur le système d'exploitation. En même temps, avec l'évolution du système d'exploitation, les modèles de programmation qu'il peut soutenir deviennent de plus en plus riches. On peut dire que ces deux technologies sont complètement évolué pour tirer parti des avantages des progrès du système d'exploitation. En règle générale, la technologie qui profite en premier de ces avantages est C\C++Parce que les progrès du système d'exploitation fournissent la plupart des appels système les plus récents, et C\C++est le plus pratique pour utiliser ces appels système, mais c'est aussi le plus complexe. D'autres plateformes doivent constamment évoluer, encapsuler, afin que les utilisateurs puissent bénéficier de ces avantages. Une fois que cette plateforme cesse de mise à jour, c'est le début de son déclin. Plus le encapsulation est pratique pour les utilisateurs, plus il est amical, et plus il y a de personnes qui l'utilisent. Bien que beaucoup de gens puissent écrire du code basé sur ces plateformes rapidement, ils ne comprennent souvent pas l'esprit de ces technologies, car elles ne comprennent pas fondamentalement les motivations et les principes de ces technologies. Ce que nous discutons ici sont des technologies liées à ces deux technologies.
Dans la conception de n'importe quel système d'exploitation, ce qui suit5Ces modèles IO sont inévitables.
1. blocking I/O
2. nonblocking I/O
3. I/O/O multiplexage (select, poll et epoll)
4. I/O déclenché par signal/O (SIGIO)
5. I/O asynchrone/O (les fonctions aio_ POSIX)
1. blocking I/O
Comme illustré, l'un des avantages de ce modèle IO est que le codage est simple, et il s'agit l'un des modèles IO les plus anciennement supportés par le système d'exploitation, mais le principal inconvénient est que les appels système bloquent l'exécution des threads dynamiques de l'utilisateur, ce qui cause un gaspillage de temps CPU et une faible efficacité IO.
2. nonblocking I/O
Comme illustré, une amélioration de ce modèle IO est qu'il est non bloquant, mais nécessite une rotation longue, ce qui gaspille également les cycles d'horloge du CPU.
3. I/O/O multiplexage (select, poll et epoll)
如图所示, ce modèle IO est le modèle IO le plus stable fourni par les OS aujourd'hui, la plupart des applications populaires sont basées sur ce modèle IO, par exemple NodeJS, mais ces plateformes ajoutent souvent une couche de encapsulation pour prendre directement en charge AIO.
4. I/O déclenché par signal/O (SIGIO)
如图所示, ce modèle IO est comparé à d'autres modèles3Pas d'avantage en termes de performance, et en raison de la stabilité du soutien du système instable, rarement utilisé par les concepteurs.
5. I/O asynchrone/O (les fonctions aio_ POSIX)
如图所示,ce modèle IO est le modèle AIO le plus parfait, et le modèle de programmation est le plus simple, mais il est rare que les OS prennent en charge ce modèle parfaitement, les informations en ligne indiquent que Linux travaille sur ce domaine. Une fois que l'OS fait des progrès dans ce domaine, les cadres de programmation, les plateformes et les modèles de programmation peuvent nécessiter une grande simplification.
Bien que ce modèle soit rarement pris en charge par les OS, cela ne signifie pas qu'il n'existe pas de modèle AIO maintenant. De nombreux cadres ont travaillé dans ce domaine, simulant AIO en mode utilisateur, permettant ainsi aux utilisateurs de se concentrer davantage sur le code de logique métier.
6. Synchronisation et asynchronisation, bloquant et non bloquant
Synchronisation et asynchronisation se réfèrent à l'interaction entre l'application et le noyau. Retourner après avoir lu les données est synchronisé, et retourner directement est asynchrone. Bloquant et non bloquant se réfèrent aux processus et threads, où le thread de lecture ou d'écriture attend toujours sous le mode bloquant, tandis que le thread de lecture ou d'écriture retourne immédiatement une valeur d'état sous le mode non bloquant.
Voici la totalité du contenu de cet article, j'espère qu'il vous sera utile dans vos études, et j'espère que vous soutiendrez également le tutoriel de cri.
Déclaration : Le contenu de cet article est issu du réseau, propriété de ses auteurs respectifs, contribué et téléversé par les utilisateurs d'Internet. Ce site n'en possède pas la propriété, n'a pas fait l'objet d'une rédaction humaine et n'assume aucune responsabilité juridique. Si vous trouvez du contenu présumé de violation de droits d'auteur, veuillez envoyer un email à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un email pour signaler une violation, et fournir des preuves pertinentes. Une fois confirmée, ce site supprimera immédiatement le contenu présumé de violation de droits d'auteur.)