ホームページ >データベース >Redis >Redis がシングルスレッドで、同時実行性が高く、高速である理由の詳細な説明

Redis がシングルスレッドで、同時実行性が高く、高速である理由の詳細な説明

WJ
WJ転載
2020-06-06 17:00:502403ブラウズ

Redis がシングルスレッドで、同時実行性が高く、高速である理由の詳細な説明

#Redis の同時実行性と速度が高い理由

1.redis はメモリに基づいており、メモリの読み取りおよび書き込み速度が非常に高速です;

2.redis シングルスレッドであるため、スレッドのコンテキスト切り替えにかかる時間を大幅に節約できます;

3.redis は多重化テクノロジを使用し、同時接続を処理できます。ノンブロッキング IO の内部実装では、epoll 自体によって実装された単純なイベント フレームワークを使用して epoll を使用します。 epoll での読み取り、書き込み、クローズ、接続はすべてイベントに変換され、epoll の多重化機能を使用して io に時間を無駄にすることはありません。

以下では、シングルスレッド設計と IO 多重化コア設計が高速である理由に焦点を当てます。

Redis がシングルスレッドで、同時実行性が高く、高速である理由の詳細な説明

Redis がシングルスレッドである理由

1. 公式回答

Redis はメモリベースであるため操作 、CPU は Redis のボトルネックではありません。Redis のボトルネックは、おそらくマシンのメモリまたはネットワーク帯域幅のサイズです。シングルスレッドは実装が簡単で、CPU がボトルネックにならないため、シングルスレッド ソリューションを採用するのは合理的です。

2. パフォーマンス指標

redis のパフォーマンスについては、公式サイトにも記載されていますが、通常のノートブックであれば、1 秒あたり数十万のリクエストを簡単に処理できます。

3. 詳細な理由

1) さまざまなロックによるパフォーマンスの消費が不要です

Redis のデータ構造は単純なものばかりではありませんKey-Value 、およびリストやハッシュなどの複雑な構造。これらの構造は、長いリストの後の要素の追加、ハッシュへのオブジェクトの追加または削除など、非常に細かい操作を実行できます。これらの操作では大量のロックの追加が必要になる場合があり、その結果、同期オーバーヘッドが大幅に増加します。

つまり、シングル スレッドの場合は、さまざまなロックの問題を考慮する必要がなく、ロック操作やロック解除操作がなく、デッドロックの可能性によるパフォーマンスの消費もありません。

2) シングルスレッド マルチプロセス クラスター ソリューション

シングルスレッドの能力は実際に非常に強力であり、各コアの効率も非常に高くなります。シングル スレッドよりも高いパフォーマンス制限がありますが、今日のコンピューティング環境では、単一マシンのマルチスレッドの上限でもニーズを満たすことができないことがよくあります。さらに検討する必要があるのは、マルチサーバー クラスタリング ソリューションです。スレッド技術はまだ利用できません。

したがって、シングルスレッド、マルチプロセス クラスターは流行のソリューションです。

3) CPU 消費量

単一スレッドを使用して不要なコンテキストの切り替えや競合状態を回避し、マルチプロセスまたはマルチスレッドによる切り替えによる CPU 消費はありません。

しかし、CPU が Redis のボトルネックになった場合、またはサーバーの他の CPU コアをアイドル状態にしたくない場合はどうすればよいでしょうか?

さらにいくつかの Redis プロセスを開始することを検討できます。Redis はリレーショナル データベースではなくキーと値のデータベースであり、データ間に制約はありません。どのキーがどの Redis プロセスに配置されているかをクライアントが区別できれば問題ありません。

Redis シングル スレッドのメリットとデメリット

1. シングル プロセスおよびシングル スレッドのメリット

コードが明確になり、処理ロジックがシンプルになります。さまざまなロックの問題を考慮しますが、それらは存在しません ロックと解放の操作で発生する可能性のあるデッドロックによるパフォーマンスの消費はありません 複数のプロセスまたはマルチスレッドによって引き起こされる切り替えによる CPU の消費はありません

2。シングルプロセスおよびシングルスレッドの欠点

マルチコア CPU のパフォーマンスを最大限に活用することはできませんが、単一マシン上で複数の Redis インスタンスを開くことで改善できます。

IO 多重化テクノロジ

redis は、ネットワーク IO 多重化テクノロジを使用して、複数の接続時間とシステムの高スループットを保証します。

マルチチャネル - 複数のソケット接続を指し、多重化 - 1 つのスレッドを再利用することを指します。主な多重化テクノロジには、select、poll、epoll の 3 つがあります。 epoll は、利用可能な最新かつ最高の多重化テクノロジです。

ここで、「複数」は複数のネットワーク接続を指し、「再利用」は同じスレッドを再利用することを指します。マルチチャネル

I/O

多重化テクノロジの使用により、単一のスレッドで複数の接続リクエストを効率的に処理でき (ネットワーク IO の時間消費を最小限に抑えます)、Redis はメモリ内のデータを非常に高速に処理します (インメモリRedis の高スループットには主に上記 2 点が貢献します。



Redis がシングルスレッドで、同時実行性が高く、高速である理由の詳細な説明Redis の高同時実行性の概要

1. Redis は純粋なメモリ データベースです。一般に、これらはすべて単純なアクセス操作です。スレッドに多くの時間がかかります。費やされる時間は主に IO に集中しているため、読み取り速度は高速です。 Redis がシングルスレッドで、同時実行性が高く、高速である理由の詳細な説明

2. IO についてもう一度話しましょう。Redis はノンブロッキング IO と IO 多重化を使用します。単一のスレッドを使用して記述子をポーリングし、データベースのオープン、クローズ、読み取り、書き込みをイベントに変換します。スレッド切り替え時のコンテキスト切り替えと競合を軽減します。

3. Redis はシングルスレッド モデルを採用しており、これにより各操作のアトミック性が保証され、スレッド コンテキストの切り替えと競合が軽減されます。

4. さらに、データ構造も非常に役立ちます。Redis はプロセス全体でハッシュ構造を使用するため、読み取り速度が速くなります。また、圧縮テーブルや短いデータなど、データ ストレージを最適化する特別なデータ構造もいくつかあります。圧縮ストレージ (スキップ テーブルなど) は、順序付けされたデータ構造を使用して読み取りを高速化します。

5. もう 1 つのポイントは、Redis が独自のイベント セパレータを使用することであり、これは比較的効率的であり、内部的にはノンブロッキング実行メソッドを使用し、比較的大きなスループット容量を備えています。

関連資料:Redis チュートリアル

以上がRedis がシングルスレッドで、同時実行性が高く、高速である理由の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51dev.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。