Maison  >  Article  >  base de données  >  Pourquoi Redis utilise-t-il un seul thread ? Pourquoi si vite ?

Pourquoi Redis utilise-t-il un seul thread ? Pourquoi si vite ?

青灯夜游
青灯夜游avant
2021-11-01 10:08:022109parcourir

Qu'est-ce qu'un seul fil de redis ? Pourquoi Redis utilise-t-il un seul thread ? Pourquoi Redis monothread est-il si rapide ? L’article suivant vous en donnera une analyse et j’espère qu’il vous sera utile !

Pourquoi Redis utilise-t-il un seul thread ? Pourquoi si vite ?

1. Concept de base

  • Qu'est-ce que le thread unique de redis (la fonction principale est sur le thread unique, pas toutes les fonctions)

    • Le réseau IO et la lecture des paires clé-valeur et L'écriture de Redis est effectuée par Complété par un seul thread (service principal de Redis)

    • Les autres fonctions de Redis sont complétées par des threads supplémentaires

      • Persistance
      • Suppression asynchrone
      • Synchronisation des données du cluster

[ Recommandations associées : Tutoriel vidéo Redis

2. Pourquoi Redis utilise un seul thread

  • La surcharge du multi-threading

    • L'utilisation du multi-threading peut augmenter le débit du système (par requête) et augmenter l'évolutivité du système.

    • Illimité L'augmentation du nombre de threads entraîne une diminution du débit

      • Les ressources partagées, telles que les structures de données partagées, sont accessibles par plusieurs threads en même temps
      • Afin de garantir la sécurité des threads, ce qui entraîne des sacrifices de performances
      • Les verrous à gros grain conduisent à tous les débits série et système Augmentent avec l'augmentation du nombre de threads
  • Par conséquent, afin d'économiser la gestion des ressources simultanées, redis utilise un seul thread pour garantir que toutes les opérations sont sérialisé

Pourquoi Redis utilise-t-il un seul thread ? Pourquoi si vite ?

Pourquoi Redis utilise-t-il un seul thread ? Pourquoi si vite ?

3. Redis monothread Pourquoi est-il rapide

  • La plupart des opérations de Redis sont en mémoire + structure de données efficace
  • redis adopte un mécanisme de multiplexage pour traiter un grand nombre de requêtes des clients dans le réseau pour atteindre un débit élevé

4.socket

  • processus de communication par socket (traitement des E/S réseau + lecture et écriture de paires clé-valeur + traitement des E/S réseau)

    • SimpleKV Afin de traiter un Get request
    • doit surveiller la demande du client (lier/écouter)
    • et le client (code) Établir une connexion (accepter)
    • Lire la demande depuis le socket (recv)
    • Analyser la demande envoyée par le client ( analyser)
    • Lire les données de valeur clé en fonction du type de requête (get)
    • Enfin, renvoyer le résultat au client, c'est-à-dire réécrire les données sur le socket (envoyer)
  • Points de blocage potentiels

    • accept() bloquera toujours s'il ne parvient pas à établir une connexion

    • recv() Lors de la lecture des données du client, bloquera toujours

Pourquoi Redis utilise-t-il un seul thread ? Pourquoi si vite ?

  • Le mode non bloquant du socket
  • garantit que le thread Redis n'attendra pas au point de blocage comme dans le modèle IO de base, et n'empêchera pas Redis de gérer la demande de connexion ou les données arrivant réellement
  • Mécanisme de multiplexage IO sous Linux

Pourquoi Redis utilise-t-il un seul thread ? Pourquoi si vite ?

.

5. Multiplexage

  • Le mécanisme de multiplexage IO sous Linux fait référence à un thread traitant plusieurs flux IO, sélectionnez /poll

  • Dans un seul thread, plusieurs sockets et sockets connectés sont surveillés en même temps

  • Implémentation spécifique

    • FD est à sockets multiples

    • Redis utilise le mécanisme epoll, permettant au noyau d'écouter le socket

    • Redis peut se connecter à plusieurs clients et traiter les requêtes, améliorant ainsi la concurrence

    • select/epoll fournit un mécanisme de rappel basé sur les événements, appelant le traitement correspondant pour différents événements. La fonction

      • place d'abord l'événement dans la file d'attente des événements, sans vérifier si la requête se produit réellement, évitant ainsi le gaspillage des ressources CPU
      • Effectuez la opération de réponse en fonction de l'événement correspondant

Pourquoi Redis utilise-t-il un seul thread ? Pourquoi si vite ?

6. Résumé

  • Redis est-il vraiment monothread

    • utilise un seul thread pour les opérations d'E/S réseau et de lecture et d'écriture de données.
  • Pourquoi utiliser un seul thread

    • pour éviter les problèmes de contrôle de concurrence dans le développement multithread.
    • Le modèle IO multiplexé est étroitement lié.
  • Pourquoi un seul thread est-il si rapide

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de 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!

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