Cet article parlera du modèle de réacteur monothread, du modèle d'E/S et du modèle d'E/S multithread dans Redis. J'espère qu'il vous sera utile !
hautes performances de redis
- accès à la mémoire pure, toutes les données sont en mémoire, toutes les opérations sont des opérations au niveau de la mémoire et le temps de réponse de la mémoire est au niveau de la nanoseconde. Par conséquent, le processeur du processus Redis n'a fondamentalement pas de temps d'attente d'E/S disque et de problèmes de performances de lecture et d'écriture de la mémoire. Le CPU n'est pas le goulot d'étranglement de Redis (la taille de la mémoire et les E/S réseau sont le goulot d'étranglement de Redis, c'est-à-dire). c'est-à-dire l'écart entre le client et le serveur. [Recommandations associées : Tutoriel vidéo Redis]
- adopte un modèle monothread et la mise en œuvre monothread est simple. Évite la surcharge causée par les changements de contexte fréquents des multi-threads et les mécanismes de synchronisation tels que les verrous. Structures de données de base simples et efficaces : chaînes dynamiques (SDS), listes chaînées, dictionnaires, listes chaînées de saut, ensembles d'entiers et listes compressées. Ensuite, redis utilise cette base pour implémenter des objets que les utilisateurs peuvent utiliser : chaînes, listes, hachages, ensembles, ensembles ordonnés et autres objets
- processeur d'événements réseau en mode réacteur. Il utilise le multiplexage d'E/S pour surveiller plusieurs sockets en même temps, ce qui constitue un modèle d'E/S efficace. Pour des connaissances liées au réacteur, vous pouvez lire cet article
Article sur le framework : Voir le modèle Linux haute performance IO+Reactor du réseau
Pourquoi utiliser un seul thread
Utilisez un seul thread pour éviter les changements de contexte inutiles et les conditions de concurrence ; Il n'y a pas de consommation de processeur due à la commutation causée par le multi-threading
- Il n'est pas nécessaire de prendre en compte divers problèmes de verrouillage, il n'y a pas d'opération de verrouillage et de libération des verrous, et il n'y a pas de consommation de performances causée par d'éventuels blocages
- Simple et maintenable, le mode multithread rendra l'écriture du programme plus complexe et plus gênante. La mise en œuvre monothread est facile à mettre en œuvre
-
redis est un système monothread ?
Nous disons souvent que Redis est monothread car son réacteur de modèle de traitement des événements réseau est monothread
- Si une demande client supprime des millions de valeurs de clé, cette commande peut provoquer un blocage. Dans redis 4.0, nous avons choisi d'introduire le multi-threading pour implémenter ce type de commandes non bloquantes
- Dans la version redis 6.0, le multi-threading a été officiellement introduit pour gérer les réponses d'E/S de lecture et d'écriture du client, tandis que le traitement de redis les événements de commande sont toujours traités sur une seule ligne sur le thread principal
- Si c'est pour l'ensemble du système Redis, il y a toujours d'autres threads pour gérer les tâches asynchrones, telles que la synchronisation AOF et RDB
-
le modèle d'E/S redis. Le traitement de
redis est rapide, pas seulement parce qu'il s'agit d'un système de mémoire pur à thread unique. Le système de mémoire adopte également le modèle Reactor et utilise le multiplexage d'E/S pour traiter les requêtes externes et réduire la connexion réseau et les temps d'attente de lecture et d'écriture. Il peut gérer un grand nombre de requêtes client simultanément dans les opérations d'E/S réseau, atteignant un débit élevé et une concurrence élevée
modèle d'E/S version multithread de redis 6.0
Plus Pour la programmation connaissances connexes, veuillez visiter :
Introduction à la programmation
! !
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!