Optimisation de la communication réseau - flux traditionnels IO et comment optimiser le fonctionnement IO

Résumé: E / S mémoire plus rapide que lent, surtout dans le contexte actuel de la grande époque de données, problème de performance E / S est particulièrement importante, d'E / S de lecture et d'écriture est devenue le goulot d'étranglement de la performance du système dans de nombreux scénarios , nous ne pouvons ignorer. Cet article connaissance approfondie de Java E / S en haute concurrency, exposant le prochain grand problème de performance de la scène commerciale de données, de la source pour commencer l'apprentissage des méthodes d'optimisation. Références: Chao "Java Performance Tuning de combat"

1. Quel est le E / S?

un accès E / S et de la machine d'échange principal des informations de canal, et le débit est le principal moyen pour terminer l'opération I / O . Dans l'ordinateur, à un flux d'information est converti. On commande le courant, et donc par rapport à une machine ou d' une application,Typiquement, la machine ou le contenu de cette demande est désignée pour recevoir des flux d'entrée externe (InputStream), la sortie de l'information à partir de la machine d'application ou d'un flux de sortie appelé vers l'extérieur (OutputStream), désignés collectivement sous forme de courants d'entrée / sortie (I / O Streams).
La classe Java opération I / O dans le paquet java.io, dans lequel InputStream, OutputStream et Reader, classe écrivain est le paquet d' E / S de quatre catégories de base, qui sont transformés flux de caractères et de flux d'octets.
Insérer ici l'image Description

1,1 flux d'octets

InputStream / OutputStream classe abstraite est un flux d'octets, les deux classes abstraites envoyés naissance à un certain nombre de sous - classes, sous - classes différentes traitent différents types d'opérations . Si le fichier est lu et les opérations d'écriture, utilisez FileInputStream / FileOutputStream, lire et écrire des opérations si le tableau est, sur l'utilisation de ByteArrayInputStream / ByteArrayOutputStream, si les opérations de lecture et d' écriture ordinaires de la chaîne, à utiliser BufferedInputStream / BufferedOutputStream.
Insérer ici l'image Description

1.2. Flux de caractères

flux de caractères Reader / Writer est une classe abstraite , ces deux classes abstraites dérivent également un certain nombre de sous - classes, sous - classes différentes traitent différents types d'opérations.
Insérer ici l'image Description

2, le problème de la performance E / S traditionnel

opération E / S dans les opérations d'E / S disque et réseau opérations E / S.

opérations IO détail
Disque opérations E / S Les données lues à partir du disque est introduit dans la source de mémoire, l'information lue est émis sur le disque physique persistant;
Réseau des opérations d'E / S La lecture des informations à partir du réseau est appliqué en entrée à la mémoire, l'information de sortie finale pour le réseau.

Cependant, le disque I / O ou d'un réseau d'E / S, il y a de sérieux problèmes de performance dans le E / S conventionnel.

Problèmes de performances détail
1. réplication multiple de mémoire Insérer ici l'image DescriptionLes données copiées à partir du périphérique externe à l'espace du noyau, puis copié à partir de l'espace du noyau vers l'espace utilisateur, qui a eu lieu deux opérations de copie de mémoire. Cette action provoque la copie des données inutiles et le changement de contexte, ce qui réduit les performances d'E / S
2. obstruction Dans le E / S traditionnel, la lecture de InputStream () est un tout fonctionnement en boucle, il aurait été en attente de données à lire, ne reviendra pas avant les données sont prêtes. Cela signifie que si aucune donnée est prêt, l'opération de lecture sera toujours suspendu, l'utilisateur thread est bloqué.

3, la façon d'optimiser les opérations d'E / S

JDK1.4 publié package java.nio (nouveau acronyme E / S), version NIO optimise la copie de la mémoire et de graves problèmes de performance causés par l'obstruction. JDK1.7 a publié NiO2, fait de réaliser au niveau du système d'exploitation, E / S asynchrone

opérations Optimiser détail
1. Utiliser un tampon optimisé opération d'écriture de flux Caractéristiques I / O et NIO plus grande différence est que l' héritage flux d' E / S orienté, orienté NIO Buffer ( tampon est un bloc contigu de mémoire est lu et les données d'écriture en transit NIO ). fichier tampon peut être lu en mémoire une fois pour faire le traitement ultérieur, la manière traditionnelle est de lire le fichier côté des données de traitement de pointe. Bien que l'E / S traditionnel est utilisé derrière le pare-chocs, par exemple BufferedInputStream, mais pas encore comparable à NIO. NIO utilisé à la place des opérations d'E / S traditionnelles, peut améliorer les performances globales du système.
2. Utilisez DirectBuffer réduire la mémoire copie NIO addition de tampon est faite pour optimiser bloc tampon, mais fournit également un accès direct à des classes de mémoire physique DirectBuffer. La mémoire de Common JVM tampon est allouée,Et la mémoire physique est allouée directement DirectBuffer. mémoire d'application DirectBuffer n'est pas responsable de la collecte des ordures directement par la machine virtuelle Java, mais lorsque l'emballage DirectBuffer est recyclé, le bloc de mémoire sera libéré par le mécanisme Java de référence.
3. éviter le blocage d'optimiser les opérations d' E / S problème de blocage est l'héritage d' E / S plus grands inconvénients de la libération NIO,Et un canal de multiplexeurCes deux éléments de base pour obtenir un NIO non-bloquant est.

canal détaillé et un multiplexeur (certaines des informations sur le blog de BIO à NIO Netty modèle de thread pour expliquer en )

paquet détail
Canal == a son propre processeur, je peux être accompli entre l'espace noyau et les opérations de disque / O ==. En NIO, nous devons lire et les données d'écriture à travers le canal, car le canal est bidirectionnel, donc la lecture et l'écriture peut être réalisée simultanément.
Sélecteur la mise en œuvre événementielle, nous pouvons enregistrer accpet, lisez écouter les événements, Sélecteur continuera aux registres du sondage sur le canal dans le sélecteur, si un événement se produit au-dessus du moniteur de canal, le canal est dans un état prêt, alors je / opérations O. Quand il n'y a pas d'E / S sur les opérations de la Manche, le fil ne se serait pas attendu, mais continuera à interroger tous les canaux, afin d'éviter le blocage se produit
Publié 26 articles originaux · louange gagné 18 · vues 9737

Je suppose que tu aimes

Origine blog.csdn.net/qq_28959087/article/details/102135972
conseillé
Classement