Redisがシングルスレッドである理由と、同時実行性と速度が高い3つの主な理由を詳しく解説

藏色散人
リリース: 2020-08-11 13:16:24
転載
2997 人が閲覧しました

次のコラム Redis チュートリアル では、Redis がシングルスレッドである理由と、高い同時実行性と高速性の 3 つの主な理由を紹介します。困っている友達に!

Redisがシングルスレッドである理由と、同時実行性と速度が高い3つの主な理由を詳しく解説

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

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

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

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

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

1.公式の回答

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

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

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

コードが明確になり、処理ロジックがシンプルになります

さまざまなロックを考慮する必要がない問題は、ロック操作やロック解除操作がなく、デッドロックの可能性によるパフォーマンスの消費がありません
マルチプロセスまたはマルチスレッドによる切り替えによる CPU の消費がありません
シングルプロセスおよびシングルスレッドの欠点
使用できないマルチコア CPU のパフォーマンスは、単一マシン上で複数の Redis インスタンスを開くことで向上できます。
IO 多重化テクノロジ
redis はネットワーク IO 多重化テクノロジを使用して、高いパフォーマンスを保証します。複数の接続時のシステムのスループット。
マルチチャネル - 複数のソケット接続を指します。多重化 - 1 つのスレッドを再利用することを指します。主な多重化テクノロジには、select、poll、epoll の 3 つがあります。 epoll は、利用可能な最新かつ最高の多重化テクノロジです。
ここで、「マルチチャネル」は複数のネットワーク接続を指し、「再利用」は同じスレッドを再利用することを指します。マルチチャネル I/O 多重化テクノロジの使用により、単一のスレッドで複数の接続リクエストを効率的に処理でき (ネットワーク IO の時間消費を最小限に抑えます)、Redis はメモリ内のデータを非常に高速に処理します (ここではメモリ内操作は問題になりません) ).パフォーマンスのボトルネック)、主に上記 2 点が Redis の高スループットに貢献します。

Redis の高同時実行性の概要

  1. Redis は純粋なメモリ データベースです。一般に、これは単純なアクセス操作です。スレッドには多くの時間がかかり、消費は主に IO に集中しているため、読み取り速度は高速です。
  2. もう一度 IO について話しましょう。Redis はノンブロッキング IO、IO 多重化を使用し、単一のスレッドを使用して記述子をポーリングし、データベースのオープン、クローズ、読み取り、書き込みをイベントに変換し、それを削減します。スレッドを切り替える際のコンテキストの切り替えと競合を排除します。
  3. Redis は、各操作のアトミック性を確保し、スレッド コンテキストの切り替えと競合を減らすためにシングル スレッド モデルを採用しています。
  4. さらに、データ構造も非常に役立ちます。Redis はプロセス全体でハッシュ構造を使用するため、読み取り速度が速くなります。また、圧縮テーブル、短いデータなど、データ ストレージを最適化する特別なデータ構造もいくつかあります。圧縮ストレージ、別の例では、テーブルをスキップし、順序付けされたデータ構造を使用して読み取りを高速化します。
  5. もう 1 つのポイントは、Redis が独自のイベント セパレータを使用することです。これは比較的効率的で、内部的にノンブロッキングの実行メソッドを使用し、比較的大きなスループット容量を備えています。

上記は、Redis の高い同時実行性と高速性について詳しく説明しています。

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

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート