Maison  >  Article  >  base de données  >  Pourquoi Redis choisit-il un seul thread ?

Pourquoi Redis choisit-il un seul thread ?

PHPz
PHPzavant
2023-05-30 13:01:331838parcourir

1. Itération de la version Redis

Pourquoi Redis choisit-il un seul thread ?

Redis2.6, prend en charge le script Lua

Redis3.0, prend en charge le script Lua ; Cluster ;

Redis4.0, persistance hybride, suppression asynchrone multithread ;

Redis5.0, reconstruction du code de base

Redis6 0. , IO multithread ;

Redis7.0, Function, Multi-part-AOF ;

2. Pourquoi Redis utilisait-il toujours un seul thread avant Redis4.0 ?

1. Redis adopte un modèle monothread pour faciliter le développement et la maintenance

2 Le modèle monothread peut également gérer plusieurs clients simultanément via le multiplexage IO et non ; blocage des requêtes IO

3. Pour Redis, le principal goulot d'étranglement des performances est la mémoire et le réseau, pas le processeur

3.

Avant Redis 6.0, Redis était monothread, du traitement des E/S du réseau au traitement réel des commandes de lecture et d'écriture, mais le multithreading était utilisé pour la suppression et la persistance des données.

Le goulot d'étranglement des performances de Redis réside principalement dans les E/S réseau. Par conséquent, à partir de Redis 6.0, plusieurs threads IO sont utilisés pour traiter les requêtes réseau afin d'améliorer le parallélisme du traitement des requêtes réseau.

4. Comment le thread principal Redis et le thread IO complètent-ils la requête ?

Pourquoi Redis choisit-il un seul thread ?

1. Le serveur et le client établissent une connexion socket
Le thread principal est chargé d'établir la connexion et de mettre le socket dans le global En attendant la file d'attente, le thread principal alloue les connexions de socket aux threads IO via une interrogation.

2. Le thread IO lit et analyse la requête
Une fois que le thread principal attribue le socket au thread IO, il entrera dans un état de blocage et attendra le thread IO pour compléter la demande du client. Ceci lors de l'utilisation de plusieurs threads IO pour le traitement parallèle.

3. Le thread principal exécute la commande de requête
Une fois que le thread IO a analysé la requête, le thread principal exécutera toujours ces commandes de manière monothread.

4. Le thread IO réécrira sur le socket et le thread principal effacera la file d'attente globale
Lorsque le thread principal aura fini d'exécuter la commande request, le résultat sera écrit dans le tampon, et le thread principal entrera dans un état de blocage, en attendant que le thread IO réécrive le résultat sur le socket et le renvoie au client.

Après avoir réécrit le socket, le thread principal efface la file d'attente globale.

5. Qu'est-ce que le multiplexage IO ?

Le multiplexage IO, un modèle IO synchrone qui implémente un thread pour surveiller plusieurs descripteurs de fichiers. Une fois qu'un descripteur de fichier est prêt, il peut notifier à l'application correspondante de lire et d'écrire en conséquence, lorsqu'aucun descripteur de fichier. est prêt, le programme entrera dans l'état de blocage et libérera les ressources du processeur.

1. IO, le niveau du système d'exploitation fait référence aux opérations de lecture et d'écriture de données entre l'état du noyau et l'état de l'utilisateur

2. connexions socket ;

3. Multiplexage, multiplexage des threads ;

4. Multiplexage IO, utilisant un seul thread pour gérer plusieurs connexions socket client en même temps ;

Le descripteur de fichier FileDescriptor correspondant au socket client est enregistré dans epoll, et epoll surveillera quelles sockets ont des messages pour éviter un grand nombre d'opérations inutiles.

À ce stade, le socket adopte un mode non bloquant. L'ensemble du processus ne se bloquera que lors de l'appel de la sélection, du sondage et de l'epoll. Il ne se bloquera pas lors de la réception des messages du client et le processus le sera. Ce mode est généralement appelé mode événementiel, c'est-à-dire réactif du réacteur.

En utilisant epoll, le but ultime est d'améliorer le débit du serveur.

Le multiplexage IO et la fonction epoll sont les raisons directes de **"Pourquoi Redis est-il si rapide ?"**.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer