Weil Sie nicht nur Zeit damit verbringen, während Redis Befehle ausführt, sondern auch Daten übertragen (Befehle senden, Ergebnisse empfangen). Im Single-Thread-Modus funktioniert Redis während der Übertragung nicht. Während Redis funktioniert, findet keine Übertragung statt. Mehrere Verbindungen oder eine Pipeline-Verbindung sind hier, um Ihnen dabei zu helfen, sowohl die Bandbreite als auch die CPU-Zyklen zu sättigen.
Und bei luttece geht es nicht nur um Geschwindigkeit. Es hilft Ihnen auch dabei, Ihren Code mit einer asynchronen und reaktiven API besser zu organisieren.
Zurück zum Leistungsthema, hier ist ein einfacher Benchmark, um ein allgemeines Verständnis der Auswirkungen von Threading und Pooling zu erhalten. Beachten Sie, dass das Pooling zwar etwas langsamer ist (Sie verbringen einige Zeit mit Pooloperationen), es Ihnen jedoch ermöglicht, Aktionen zu isolieren (damit ein Fehler andere Threads nicht beeinflusst) und MULTI
zu verwenden und Sperrbefehle.
Hier sind meine Ergebnisse (das lokale System hat 4 Kerne, die CPU des Remote-Systems ist etwa 2-mal langsamer):
Threads=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
Sie können hier sehen, dass die Leistung sehr gut mit der Anzahl der Threads skaliert, also ist Salat nicht nutzlos.