Защото прекарвате време не само докато Redis изпълнява команди, но и прехвърляте данни (изпращане на команди, получаване на резултати). В режим на една нишка, докато прехвърляте, Redis не работи. Докато Redis работи, не се извършва прехвърляне. Множество връзки или една конвейерна връзка са тук, за да ви помогнат да наситите както честотната лента, така и циклите на процесора.
И luttece не е само за скорост. Също така ви помага да организирате кода си по-добре с асинхронен и реактивен API.
Обратно към темата за производителността, ето прост еталон, за да получите общо разбиране за въздействието на нишките и обединяването. Обърнете внимание, че докато обединяването е малко по-бавно (прекарвате известно време в операции на пула), то ви позволява да изолирате действия (така че грешката да не засяга други нишки) и да използвате MULTI
и блокиращи команди.
Ето моите резултати (локалната система има 4 ядра, процесорът на отдалечената система е около 2 пъти по-бавен):
Теми=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
Теми=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
Теми=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
Тук можете да видите, че производителността се променя много добре с броя на нишките, така че марулята не е безполезна.