Redis は、単一プロセス、単一スレッド モデルを使用するメモリベースのキー/値データベースを使用しており、C 言語で記述されており、公式データは 100,000 に達することがあります。 QPS (1 秒あたりのクエリ数)。 では、なぜ Redis はこれほど速いのでしょうか?そんなに効率が良いのでしょうか?
1. 完全にメモリに基づいているため、ほとんどのリクエストは純粋なメモリ操作であり、非常に高速です。データは HashMap と同様にメモリに保存されます。HashMap の利点は、検索と操作の時間計算量が O(1);
2 であることです。データ構造が単純で、データ操作も簡単です。シンプルです。Redis のデータ構造は特別に設計されています;
3. 不必要なコンテキストの切り替えや競合状態を回避するために単一のスレッドを使用します。 CPU に依存し、さまざまなロックを考慮する必要がありません。ロックのロックと解放の問題がなく、デッドロックによるパフォーマンスの消費がありません。
4. マルチチャネル I/O 多重化モデルを使用します。 、ノンブロッキング IO;
5. 使用される基礎となるモデルが異なり、基礎となる実装メソッドとクライアントとの通信用のアプリケーション プロトコルが異なります。Redis は独自の VM メカニズムを直接構築します。システム関数を呼び出すと、ある程度の時間が無駄になります。移動とリクエスト;
上記の点は比較的理解しやすいです。以下では、マルチチャネル I/O 多重化モデルについて簡単に説明します。
マルチチャネル I/O 多重化モデルでは、select、poll、および epoll を使用して、複数のストリームの I/O イベントを同時に監視できます。アイドル状態の場合、これらは現在のスレッドをブロックします。 1 つ以上のストリームに I/O イベントがある場合、それらはブロックされた状態から抜け出します。ウェイクアップすると、プログラムはすべてのストリームをポーリングし (epoll は実際にイベントを発行するストリームのみをポーリングします)、準備ができたストリームのみを順番に処理します。無駄な操作が多い。 ここで、「複数」は複数のネットワーク接続を指し、「再利用」は同じスレッドを再利用することを指します。マルチチャネル I/O 多重化テクノロジの使用により、単一のスレッドで複数の接続リクエストを効率的に処理でき (ネットワーク IO の時間消費を最小限に抑えます)、Redis はメモリ内のデータを非常に高速に処理します。つまり、メモリ内の操作は行われません。 Redis のパフォーマンスに影響を与えるボトルネックになる主に、上記の点が Redis の高スループットに寄与しています。以上がRedis シングルスレッドが効率的であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。