Redis がシングルスレッドである理由: 1. シングルスレッドではさまざまなロックによるパフォーマンスの消費が必要ありません; 2. シングルスレッドのマルチプロセス クラスター ソリューション; 3. シングルスレッドでは不必要なコンテキストの切り替えが回避されます競合状態、および CPU を消費する複数のプロセスまたはスレッドによって引き起こされる切り替えはありません。
簡単な分析:
(推奨チュートリアル: redis チュートリアル)
Redisこれはメモリベースの操作です。CPU は Redis のボトルネックではありません。Redis のボトルネックは、おそらくマシンのメモリ サイズまたはネットワーク帯域幅です。シングルスレッドは実装が簡単で、CPU がボトルネックにならないため、Redis がシングルスレッド ソリューションを採用するのは合理的です。
詳細な理由の紹介:
1. さまざまなロックによるパフォーマンスの消費は必要ありません
Redis のデータ構造は単純な Key-Value だけではなく、リストとハッシュも含まれます。このような複雑な構造は、長いリストの末尾への要素の追加、ハッシュへのオブジェクトの追加または削除など、非常にきめの細かい操作を実行できます。これらの操作では大量のロックの追加が必要になる場合があり、その結果、同期オーバーヘッドが大幅に増加します。
つまり、シングル スレッドの場合は、さまざまなロックの問題を考慮する必要がなく、ロック操作やロック解除操作がなく、デッドロックの可能性によるパフォーマンスの消費もありません。
2. シングルスレッド マルチプロセス クラスター ソリューション
シングルスレッドの能力は実際には非常に強力であり、各コアの効率も非常に高いです。シングル スレッドよりも高いパフォーマンス制限がありますが、今日のコンピューティング環境では、単一マシンのマルチスレッドの上限でもニーズを満たすことができないことがよくあります。さらに検討する必要があるのは、マルチサーバー クラスタリング ソリューションです。スレッド技術はまだ利用できません。
3. CPU 消費
不要なコンテキスト切り替えや競合状態を避けるためにシングル スレッドを使用し、マルチプロセスやマルチスレッドによる切り替えによる CPU 消費はありません。しかし、CPU が Redis のボトルネックになった場合、またはサーバーの他の CPU コアをアイドル状態にしたくない場合はどうすればよいでしょうか?
さらにいくつかの Redis プロセスを開始することを検討できます。Redis はリレーショナル データベースではなくキーと値のデータベースであり、データ間に制約はありません。どのキーがどの Redis プロセスに配置されているかをクライアントが区別できれば問題ありません。
以上がRedis がシングルスレッドである理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。