


Explication détaillée d'exemples de gestion du tampon IO
Le prototype d'écriture dans le système Linux IO est ssize_t write(int filees, const void * buff, size_t nbytes);
Lors de l'appel d'écriture Lors de la lecture des données, l'écriture revient directement une fois l'appel terminé, mais le disque est un périphérique lent. Le système d'exploitation enregistrera les données dans le tampon du noyau et sera responsable de l'écriture des données sur le disque de manière asynchrone. Bien entendu, si le système tombe en panne à ce moment-là, les données seront perdues. Write est un appel système, et chaque appel piègera le noyau, donc choisir une taille de tampon de longueur de bloc appropriée et minimiser ses appels peut optimiser l'efficacité. Dans les IO standard d'ANSI C, lorsque nous appelons printf/fprintf/fputs, etc., ils seront traités dans un flux. Nous avons seulement besoin d'écrire dans le flux au lieu de sélectionner une taille de buff comme write, car la bibliothèque IO standard gère. de nombreux détails pour nous, tels que l'allocation de tampon, l'exécution d'E/S avec une longueur optimisée, etc. Cela réduira le nombre d’appels système d’écriture/lecture et améliorera l’efficacité. Mais en même temps, un autre problème sera introduit : la copie des données. Par exemple, lors de l'utilisation des fonctions fgets et fputs, elle doit généralement passer par deux tampons : l'un est le tampon IO standard et l'autre est le tampon du noyau qui est utilisé. appels en lecture et en écriture. Mais en général, l’utilisation des E/S standard a une interface plus simple que celle du système et est tout aussi efficace.
Standard IO fournit trois types de tampons : cache complet, cache de ligne et aucun cache. Le cache complet ne sera activement vidé que lorsque le tampon est plein. Il est généralement utilisé pour un fichier disque IO. . Le cache de ligne sera vidé lorsqu'il rencontrera un caractère de nouvelle ligne dans le tampon. Dans un autre cas, le tampon sera vidé lorsque les données d'entrée doivent être obtenues à partir de l'entrée et de la sortie standard. Le cache de ligne est généralement utilisé dans les terminaux interactifs. Sans mise en cache, cela équivaut à écrire directement la sortie de l'appel système. Le flux d'erreur standard stderr n'est généralement pas mis en cache, ce qui permet d'afficher le message d'erreur le plus rapidement possible. En plus des conditions de vidage par défaut, le tampon sera également vidé lorsque la fonction fflush est explicitement appelée et que le programme se termine normalement. Nous pouvons utiliser setbuf/setvbuf pour modifier la longueur du tampon par défaut, voir APUE Section 5.4.
Dans un programme qui utilise les E/S standard, lorsque nous redirigeons une sortie standard vers un fichier, le cache de ligne deviendra un cache complet, ce qui peut provoquer des erreurs inattendues, comme lors de l'appel printf("*****n"), sera affiché normalement lorsque le programme est exécuté en mode interactif. Mais lorsque la sortie standard est redirigée vers un fichier, la zone tampon est entièrement mise en cache, printf ne produira pas normalement et la ligne de données est toujours dans le tampon. Si vous créez un processus enfant à ce moment-là, lorsque l'espace de données est copié dans le processus enfant, les données du tampon seront également copiées dans le processus enfant. Ensuite, si la sortie est effectuée dans le processus enfant, le contenu précédent du tampon sera actualisé, ce qui entraînera une sortie inattendue.
Dans la programmation réseau, les IO système doivent être utilisées directement. Le mécanisme de mise en mémoire tampon introduit par les IO standard pour améliorer les performances augmente la complexité des applications réseau. De plus, dans un certain sens, le flux IO standard est en duplex intégral et peut effectuer des entrées et des sorties en même temps. Cependant, les restrictions sur les flux et les restrictions sur les sockets entrent parfois en conflit. (Voir CSAPP P611)
Certaines bibliothèques réseau avancées (telles que la bibliothèque muduo) créeront leurs propres tampons basés sur l'utilisation des E/S du système pour aider les utilisateurs à protéger les E/S du système. Certains inconvénients, tels comme lors de l'appel d'écriture pour envoyer une grande quantité de données, la couche application doit attendre lorsque le tampon d'envoi est plein, et lorsque la lecture reçoit des données, les paquets sont collants et les données sont reçues lentement. Lorsque le tampon de la couche application est ajouté, la bibliothèque réseau gère ces détails d'implémentation pour simplifier les opérations de l'utilisateur.
Linux propose également une technologie zéro copie pour réduire les copies de mémoire et ainsi améliorer l'efficacité. Nous savons que l'utilisation de la lecture/écriture pour envoyer des données du disque vers la carte réseau nécessitera quatre opérations de copie : lorsqu'une application en a besoin. pour accéder à une certaine donnée À ce moment, le noyau du système d'exploitation vérifiera d'abord si les données ont été stockées dans le tampon de l'espace d'adressage du noyau du système d'exploitation en raison d'un accès précédent au même fichier. Si les données ne sont pas trouvées. dans le tampon du noyau, Linux Le noyau du système d'exploitation lira d'abord ces données à partir du disque et les placera dans le tampon du noyau du système d'exploitation. Si cette opération de lecture de données est effectuée par DMA, alors pendant le processus de lecture de données par DMA, le CPU n'a besoin que d'effectuer la gestion du tampon, et de créer et traiter le DMA. De plus, le CPU n'a pas besoin d'effectuer de nombreuses autres modifications. choses, une fois que DMA a effectué l'opération de lecture des données, il informera le système d'exploitation pour un traitement ultérieur. Le système d'exploitation Linux stockera cette donnée dans l'espace d'adressage de l'application qui a demandé cette donnée en fonction de l'adresse de l'espace d'adressage de l'application spécifiée par l'appel système de lecture. Le système d'exploitation doit restaurer les données. Une copie est effectuée à partir du tampon dans l'espace d'adressage de l'application utilisateur vers le tampon du noyau lié à la pile réseau. Ce processus nécessite également l'utilisation du processeur. Une fois l'opération de copie des données terminée, les données seront regroupées puis envoyées à la carte d'interface réseau. Comme le montre la description ci-dessus, au cours de ce processus de transfert de données traditionnel, les données sont copiées au moins quatre fois. Même si DMA est utilisé pour communiquer avec le matériel, le processeur doit toujours accéder aux données deux fois.
(ps : je me souviens avoir lu une question d'entretien auparavant qui disait que le processus de sortie printf passe par plusieurs tampons, maintenant tout le monde comprend !)
L'utilisation de la technologie zéro copie peut éviter la copie des données dans le tampon de l'espace d'adressage du noyau du système et dans le tampon de l'espace d'adressage de l'application utilisateur. Parfois, l'application n'a pas besoin d'accéder aux données pendant le processus de transmission des données. Les données transmises n'ont pas besoin d'être copiées dans la zone d'application utilisateur, mais peuvent être envoyées directement à la carte réseau via le noyau. et aucune copie n’est requise à l’heure actuelle. Sous Linux, vous pouvez utiliser mmap, sendfile et splice pour obtenir une copie nulle.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La solution au problème de connexion en arrière-plan de Discuz est révélée. Des exemples de code spécifiques sont nécessaires Avec le développement rapide d'Internet, la construction de sites Web est devenue de plus en plus courante, et Discuz, en tant que système de création de sites Web de forum couramment utilisé, a été favorisé par. de nombreux webmasters. Cependant, précisément en raison de ses fonctions puissantes, nous rencontrons parfois des problèmes lors de l'utilisation de Discuz, comme des problèmes de connexion en arrière-plan. Aujourd'hui, nous allons révéler la solution au problème de connexion en arrière-plan de Discuz et fournir des exemples de code spécifiques. Nous espérons aider ceux qui en ont besoin.

Comment utiliser Redis pour mettre en œuvre la gestion distribuée des transactions Introduction : Avec le développement rapide d'Internet, l'utilisation de systèmes distribués devient de plus en plus répandue. Dans les systèmes distribués, la gestion des transactions constitue un défi important. Les méthodes traditionnelles de gestion des transactions sont difficiles à mettre en œuvre dans les systèmes distribués et sont inefficaces. Grâce aux caractéristiques de Redis, nous pouvons facilement mettre en œuvre une gestion distribuée des transactions et améliorer les performances et la fiabilité du système. 1. Introduction à Redis Redis est un système de stockage de données basé sur la mémoire avec des performances de lecture et d'écriture efficaces et des données riches

Êtes-vous inquiet du code tronqué du backend WordPress ? Essayez ces solutions, des exemples de code spécifiques sont nécessaires. Avec l’application généralisée de WordPress dans la construction de sites Web, de nombreux utilisateurs peuvent rencontrer le problème d’un code tronqué dans le backend WordPress. Ce type de problème entraînera l'affichage de caractères tronqués dans l'interface de gestion en arrière-plan, causant de gros problèmes aux utilisateurs. Cet article présentera quelques solutions courantes pour aider les utilisateurs à résoudre le problème des caractères tronqués dans le backend WordPress. Modifiez le fichier wp-config.php et ouvrez wp-config.

Comment implémenter la fonction de gestion des performances des étudiants en Java ? Dans le système éducatif moderne, la gestion des performances des élèves est une tâche très importante. En gérant les performances des élèves, les écoles peuvent mieux suivre les progrès des élèves, comprendre leurs faiblesses et leurs points forts et élaborer des plans d'enseignement plus ciblés sur la base de ces informations. Dans cet article, nous verrons comment utiliser le langage de programmation Java pour implémenter des fonctions de gestion des performances des étudiants. Tout d’abord, nous devons déterminer la structure des données des notes des étudiants. Généralement, les notes des étudiants peuvent être représentées comme un

Gestion des packages d'extension Laravel : intégrez facilement du code et des fonctions tiers Introduction : Dans le développement de Laravel, nous utilisons souvent du code et des fonctions tiers pour améliorer l'efficacité et la stabilité du projet. Le système de gestion des packages d'extensions Laravel nous permet d'intégrer facilement ces codes et fonctions tiers, rendant notre travail de développement plus pratique et efficace. Cet article présentera les concepts de base et l'utilisation de la gestion des packages d'extensions Laravel, et utilisera quelques exemples de code pratiques pour aider les lecteurs à mieux le comprendre et l'appliquer. Qu'est-ce que Lara

Lorsque nous utilisons le système win10, lorsque nous utilisons la souris pour cliquer avec le bouton droit sur le bureau ou sur le menu contextuel, nous constatons que le menu ne peut pas être ouvert et que nous ne pouvons pas utiliser l'ordinateur normalement. À ce stade, nous devons restaurer. le système pour résoudre le problème. La gestion du menu contextuel Win10 ne peut pas être ouverte : 1. Ouvrez d'abord notre panneau de configuration, puis cliquez. 2. Cliquez ensuite sous Sécurité et maintenance. 3. Cliquez à droite pour restaurer le système. 4. Si elle ne peut toujours pas être utilisée, vérifiez s'il y a un problème avec la souris elle-même. 5. Si vous êtes sûr qu'il n'y a pas de problème avec la souris, appuyez sur + et entrez. 6. Une fois l'exécution terminée, redémarrez l'ordinateur.

Bonjour à tous, parlons aujourd'hui de la technologie Linux zéro copie. Nous utiliserons l'appel système sendfile comme point d'entrée pour explorer en profondeur les principes de base de la technologie zéro copie. L'idée principale de la technologie zéro copie est de minimiser la copie des données entre les mémoires et d'améliorer l'efficacité et les performances de la transmission des données en optimisant le chemin de transmission des données. 1. Introduction à la technologie zéro copie La technologie Linux zéro copie est une technologie utilisée pour optimiser la transmission de données. Elle améliore l'efficacité de la transmission de données en réduisant le nombre de copies de données entre le mode noyau et le mode utilisateur. Pendant le processus de transmission de données, il est généralement nécessaire de copier les données du tampon du noyau vers le tampon d'application, puis du tampon d'application vers le tampon du périphérique réseau avant que la transmission puisse être terminée. Avantages de la technologie zéro copie

La connexion en arrière-plan à Discuz a échoué ? Apprenez-vous à le résoudre facilement ! Comme Discuz, en tant que plate-forme de forum populaire, est largement utilisé dans la construction et la gestion de sites Web, vous rencontrerez parfois des échecs de connexion au backend, ce qui est troublant. Aujourd'hui, nous allons discuter des problèmes pouvant entraîner l'échec de la connexion au backend de Discuz, fournir des solutions et joindre des exemples de code spécifiques. J'espère que cet article pourra aider les webmasters et les développeurs qui rencontrent des problèmes similaires. 1. Le dépannage consiste à résoudre le problème de l'échec de la connexion en arrière-plan de Discuz.
