Redisがコマンドを実行している間だけでなく、データの転送(コマンドの送信、結果の受信)にも時間を費やしているためです。転送中のシングルスレッドモードでは、Redisは機能しません。 Redisが機能している間、転送は発生しません。複数の接続または1つのパイプライン接続は、帯域幅とCPUサイクルの両方を飽和させるのに役立ちます。
そして、lutteceはスピードだけではありません。また、非同期およびリアクティブAPIを使用してコードをより適切に整理するのにも役立ちます。
パフォーマンスのトピックに戻ると、スレッド化とプーリングの影響を一般的に理解するための簡単なベンチマークがあります。プールは少し遅くなりますが(プール操作にある程度の時間を費やします)、アクションを分離して(エラーが他のスレッドに影響を与えないように)、MULTI
を使用できることに注意してください。 およびブロッキングコマンド。
これが私の結果です(ローカルシステムには4つのコアがあり、リモートシステムのCPUは約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
ここで、パフォーマンスはスレッドの数に応じて非常によく変化することがわかります。したがって、レタスは役に立たないわけではありません。