Les questions les plus courantes posées récemment dans l'interview sont le domaine des IO. Certains d'entre eux ont été répondus, alors que certains d'entre eux n'ont pas bien répondu. Récemment, j'ai commencé à en savoir plus sur certaines de ces choses et je veux les résumer.
Front
1. Espace du système d'espace utilisateur
Le système Linux divisera un processus en deux espaces, l'espace utilisateur et l'espace du système. Par exemple, notre encodage normal est tout espace utilisateur. Si nous devons appeler des fonctions système, telles que la copie des fichiers système, nous devons appeler les composants du système, obtenir des services de noyau et effectuer des opérations.
Deux étapes de IO
Le processus d'exécution d'IO est divisé en deux étapes, en attendant de prête à exécuter la copie
En attente prête: nous savons que lorsque nous effectuons des opérations IO, les données peuvent provenir d'autres applications ou réseaux. S'il n'y a pas de données, le système d'exploitation les attendra. Pour le moment, l'application peut également attendre la copie: copier les données dans l'espace de travail de l'application
Blocage et non bloquant, synchrone et asynchrone
Parlons d'abord de la synchronisation et de l'asynchrone. La chose la plus simple est de voir si un fil ou un processus commence à terminer l'EI. Lors de la synchronisation d'IO, le système s'arrête et attendra que cela se termine avant de faire d'autres choses. L'IO asynchrone utilise une méthode multi-threading pour démarrer un nouveau fil pour ce faire, et vous pouvez faire d'autres choses et attendre la notification.
Parlons du blocage et du non-bloquant. Ces deux choses se concentrent réellement sur l'état du programme en attendant le résultat de l'appel. Le blocage signifie que lorsque vous obtenez ce résultat, vous vous accrocherez jusqu'à ce que vous attendiez le résultat complet. Le non-blocage signifie que lorsque le processus ne peut pas obtenir le résultat, il n'y a pas de thread de blocage. C'est un peu emmêlé. Il y a une explication commune. Si cela bloque, je veux obtenir cette chose. Pendant le processus d'acquisition, je perds le CPU. Je n'obtiendrai pas le CPU avant le résultat. Cependant, si je ne bloque pas, je continuerai à tenir le CPU et je peux toujours le vérifier.
Plusieurs modèles IO
Il y a actuellement 5 types
Bloquer IO
Le type IO le plus traditionnel, c'est-à-dire la lecture et l'écriture bloqueront
IO non bloquant
Lorsque l'utilisateur initie la lecture, il ne perdra pas le CPU, il continuera de vérifier. S'il ne réussit pas, une erreur sera renvoyée. S'il reçoit un signal réussi, il lancera une opération de lecture pour obtenir le résultat complet.
Multiplexage IO
C'est le cœur de Java Nio. Il y aura un thread qui gérera l'état de plusieurs prises pour vérifier si vous êtes prêt. Ce n'est que lorsque vous constatez que vous êtes vraiment prêt que vous appellerez le CPU pour effectuer des opérations IO. C'est plus important
Lecteur de signal IO
Utiliser moins, ignorer
Io asynchrone
Obtenez un fil à exécuter