Parce que vous passez du temps non seulement pendant que Redis exécute des commandes, mais aussi à transférer des données (envoyer des commandes, recevoir des résultats). En mode thread unique pendant le transfert, Redis ne fonctionne pas. Pendant que Redis fonctionne, aucun transfert ne se produit. Plusieurs connexions ou une connexion en pipeline sont là pour vous aider à saturer à la fois la bande passante et les cycles du processeur.
Et la lutte n'est pas qu'une question de vitesse. Il vous aide également à mieux organiser votre code avec une API asynchrone et réactive.
Revenons au sujet des performances, voici une référence simple pour obtenir une compréhension générale de l'impact du threading et de la mise en commun. Notez que bien que la mise en pool soit un peu plus lente (vous passez du temps sur les opérations de pool), elle vous permet d'isoler les actions (afin qu'une erreur n'affecte pas les autres threads) et d'utiliser MULTI
et les commandes de blocage.
Voici mes résultats (le système local a 4 cœurs, le processeur du système distant est environ 2 fois plus lent) :
Fils=1
Benchmark (address) Mode Cnt Score Error Units
LettuceThreads.pooled socket thrpt 25 35389.995 ± 1325.198 ops/s
LettuceThreads.pooled localhost thrpt 25 32075.870 ± 416.220 ops/s
LettuceThreads.pooled remote thrpt 25 3883.193 ± 67.622 ops/s
LettuceThreads.shared socket thrpt 25 39419.772 ± 1966.023 ops/s
LettuceThreads.shared localhost thrpt 25 34293.245 ± 1737.349 ops/s
LettuceThreads.shared remote thrpt 25 3919.251 ± 49.897 ops/s
Threads=2
Benchmark (address) Mode Cnt Score Error Units
LettuceThreads.pooled socket thrpt 25 56938.187 ± 2727.772 ops/s
LettuceThreads.pooled localhost thrpt 25 49420.748 ± 2091.631 ops/s
LettuceThreads.pooled remote thrpt 25 7791.706 ± 133.507 ops/s
LettuceThreads.shared socket thrpt 25 81195.900 ± 1593.424 ops/s
LettuceThreads.shared localhost thrpt 25 78404.688 ± 3878.044 ops/s
LettuceThreads.shared remote thrpt 25 3992.023 ± 39.092 ops/s
Threads=4
Benchmark (address) Mode Cnt Score Error Units
LettuceThreads.pooled socket thrpt 25 87345.126 ± 8149.009 ops/s
LettuceThreads.pooled localhost thrpt 25 75003.031 ± 4481.289 ops/s
LettuceThreads.pooled remote thrpt 25 15807.410 ± 225.376 ops/s
LettuceThreads.shared socket thrpt 25 169112.489 ± 3749.897 ops/s
LettuceThreads.shared localhost thrpt 25 115464.778 ± 5099.728 ops/s
LettuceThreads.shared remote thrpt 25 7952.492 ± 133.521 ops/s
Vous pouvez voir ici que les performances évoluent très bien avec le nombre de threads, donc la laitue n'est pas inutile.