Porque pasa tiempo no solo mientras Redis ejecuta comandos, sino también transfiriendo datos (enviando comandos, recibiendo resultados). En el modo de subproceso único mientras realiza la transferencia, Redis no funciona. Mientras Redis funciona, no se produce ninguna transferencia. Múltiples conexiones o una conexión canalizada están aquí para ayudarlo a saturar tanto el ancho de banda como los ciclos de CPU.
Y luttece no se trata solo de velocidad. También te ayuda a organizar mejor tu código con una API asíncrona y reactiva.
Volviendo al tema de rendimiento, aquí hay un punto de referencia simple para obtener una comprensión general del impacto de subprocesamiento y agrupación. Tenga en cuenta que, si bien la agrupación es un poco más lenta (pasa algo de tiempo en las operaciones de la agrupación), le permite aislar acciones (para que un error no afecte a otros subprocesos) y usar MULTI
y bloqueo de comandos.
Estos son mis resultados (el sistema local tiene 4 núcleos, la CPU del sistema remoto es aproximadamente 2 veces más lenta):
Hilos=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
Hilos=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
Hilos=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
Puede ver aquí que el rendimiento escala muy bien con la cantidad de subprocesos, por lo que la lechuga no es inútil.