Le flux IO de Java est la base de l'implémentation des entrées/sorties. Il peut facilement implémenter des opérations d'entrée/sortie de données. Différentes sources d'entrée/sortie sont exprimées de manière abstraite sous forme de « flux » en Java.
Un flux est un ensemble d'octets ordonnés et est un terme général ou une abstraction pour la transmission de données.
Les flux ont une entrée et une sortie. Lors de l'entrée, le flux circule de la source de données vers le programme. Lors de la sortie, le flux est transféré du programme vers la source de données, et la source de données peut être une mémoire, un fichier, un réseau ou un programme, etc.
Processus utilisateur et noyau du système d'exploitation
IO en Java peut être compris comme étant entre le programme Java et le noyau du système d'exploitation entre les objets.
Le blocage et le non-blocage, la synchronisation et l'asynchrone mentionnés plus loin sont le résultat de l'interaction entre ces deux objets. Dans cet article, le processus utilisateur fait référence au programme Java.
Espace programme et espace noyau
Attendre que les données soient prêtes (attendre que les données arrivent dans le tampon du noyau)
Copier le données du noyau vers le processus (copier les données du tampon du noyau vers le tampon du programme)
Sous Linux, pour une opération de lecture IO, les données ne seront pas copiées directement dans le tampon du programme.
Il sera d'abord copié dans le tampon du noyau du système d'exploitation, puis copié du tampon du noyau du système d'exploitation vers le tampon de l'application.
Espace programme : l'espace mémoire alloué aux programmes utilisateur.
Espace noyau : L'espace mémoire appartenant au noyau.
Blocage et non-blocage
Blocage : une fois que le processus utilisateur a effectué un appel système, le processus utilisateur est toujours verrouillé et ne peut pas effectuer d'autres opérations
Non bloquant : une fois que le processus utilisateur a effectué un appel système, le processus utilisateur n'est pas verrouillé et peut effectuer d'autres opérations
Le blocage et le non-blocage font référence à l'état du processus utilisateur, c'est-à-dire si l'utilisateur le processus est verrouillé
Synchrone et asynchrone
Une opération d'E/S synchrone entraîne le blocage du processus demandeur jusqu'à ce que cette opération d'E/S soit terminée.
Une opération d'E/S asynchrone L'opération d'E/S n'entraîne pas le blocage du processus demandeur.
Une opération io synchrone entraînera le blocage du processus demandeur jusqu'à ce que l'opération io soit terminée. Une opération d’E/S asynchrone n’entraînera pas le blocage du thread demandeur.
Synchronisation : le thread utilisateur et le thread io font la même chose (le thread utilisateur est bloqué, en attendant que le noyau renvoie le résultat du traitement)
Asynchrone : le thread utilisateur et le io le thread fait des choses différentes (le thread utilisateur n'est pas bloqué, fait autre chose, le traitement du noyau est terminé et le résultat est envoyé au thread utilisateur)
Descripteur de fichier
Tout est un fichier sous Linux. Un descripteur de fichier est un index créé par le noyau pour un fichier. Toutes les opérations d'E/S sont effectuées en appelant le descripteur de fichier (index), y compris le socket que nous mentionnerons ci-dessous. Lorsque Linux démarre pour la première fois, il définira automatiquement 0 comme entrée standard, 1 comme sortie standard et 2 comme erreur standard.
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!