Redisの高い並行処理と高速な理由
1.redisは、メモリのメモリベースの、非常に高速な読み取りと書き込み速度です。
2.redisはスイッチング時間スレッドコンテキストの多くを排除し、シングルスレッドです。
多重化技術を使用して3.redis、あなたは同時接続を処理することができます。内部のファイルディスクリプタを使用してIOを非ブロック達成、ファイルディスクリプタの+は、独自の実装のためのシンプルなイベントフレームワークを使用しています。読み取り、書き込み、クローズ、接続中のepollイベントに変換し、その後のepoll多重特性を使用して、IOに少し時間を無駄にされることはありません。
我々は、次のシングルスレッド設計と高速コア設計のためのIO多重化の理由に焦点を当てています。
Redisのシングルスレッドである理由
1.公式の回答
Redisのメモリ操作がボトルネック、CPUのRedisない、最も可能性のRedisのボトルネックマシンのメモリサイズや帯域幅に基づいているため。実装が容易シングルスレッド、およびCPUがボトルネックになっていませんので、シングルスレッドプログラムを採用する論理的です。
2.パフォーマンス指標
公式ウェブサイト上Redisの性能も簡単に普通のノートPCを持っている1秒あたりの要求数十万人を処理します。
3.詳細な理由
1)さまざまなパフォーマンス・オーバーヘッドをロックする必要はありません。
Redisのデータ構造は完全にシンプルなキー値、そこリスト、ハッシュや、後の長いリストに要素を追加するなど非常にきめの細かい操作を受ける可能性のある他の複雑な構造、ハッシュを追加されていませんまたは削除
オブジェクト。これらの操作が大幅に増加し、同期のオーバーヘッドが生じ、ロックの多くを追加する必要があるかもしれません。
要するに、シングルスレッドの場合には、我々が発生し、パフォーマンスのオーバーヘッドが発生することがありませんので、デッドロックのため、存在しないロック解除操作をロックし、様々な問題がロックを検討する必要はありません。
2)シングルスレッドマルチプロセスクラスタ方式
コアごとにシングルスレッドのパワー、実際には非常に強力で、非常に高い効率は、マルチスレッドの性質は、シングルスレッドのキャップよりも高い性能を持つことができますが、今日のコンピューティング環境では、1つでもマルチスレッドキャップはまた、頻繁に会うことができません必要性は、マルチスレッド技術ですマルチサーバークラスタ化されたプログラムのさらなる調査の必要性がまだ手に入らないです。
だから、シングルスレッド、マルチプロセス・クラスタは、スタイリッシュな解決策になります。
3)CPUの消費量
シングルスレッド、不要なコンテキストスイッチと競争条件を避けるために、そこにはマルチプロセスではないか、マルチスレッド切り替えのリードは、CPUを消費しています。
CPUがボトルネックになっRedisの、または他のサーバCUP核アイドルをさせたくない場合は、どのようにしますか?
これは、いくつかのRedisのプロセスよりも考えることができ、Redisのは、キーと値のデータベースです、リレーショナルデータベース、データではないとの間には制約がありません。限り、クライアントがどのキーにRedisのプロセスにそれを区別として。
Redisの利点と、シングルスレッド化のデメリット
1.シングルスレッド・プロセスの利点
- コード明確に、より単純な処理ロジック
- 様々な問題がないため、パフォーマンスの消費に起因するデッドロックの可能性を、ロックロック解除操作が存在しない、ロックを検討する必要はありません。
- CPUの消費がないため、マルチプロセス又はマルチスレッド切り替え
2.シングルスレッドのプロセスの欠点
- あなたは、マルチコアCPUのパフォーマンスを再生することはできませんが、完璧に単一のRedisの複数のインスタンスを開くことができます。
IO多重化
多重化技術を使用して、RedisのIOネットワークは、複数の接続、ハイスループットシステムを確実にします。
複数 - ソケット接続の複数の多重化を意味する - 多重スレッドを指します。選択、投票、ファイルディスクリプタ:三つの主要な多重化技術があります。epollは、最新の多重化技術は、現在最高です。
ここで「多重化」は、複数のネットワーク接続を指し、「多重化」は、同じスレッドを再利用することをいいます。マルチチャンネル
I / Oの
シングルスレッドの接続要求を複数の処理を効率的に可能にする多重化技術(IOネットワークによって消費される時間を最小化)、及びメモリ動作中Redisの動作が非常に高速であり、メモリ内のデータ(ここではできませんパフォーマンスのボトルネック)、上記の二つの主要なRedisのは、高スループットで作成されました。
Redisの高い同時実行簡単な概要
1. Redisの一般の簡単なアクセス動作している、スレッドは多くの時間を取る、インメモリデータベースに純粋であり、時間IO、非常に高速読み出し速度に焦点を当てて過ごしました。
2.スイッチング時間スレッドを減らし、イベントに変換され、書き込み、読み込み、クローズ、データベースを開き、記述子をポーリングする単一のスレッドを使用して、非ブロックIO、IO多重化を使用してあなたのIO、Redisのを伝えるために、コンテキストの切り替えと競争。
3. Redisのは、アトミックオペレーションの各々はまた、コンテキストスイッチと競争スレッドを減少させることを保証するために、シングルスレッドモデルを使用します。
4.また、データ構造はまた、Redisの全体ハッシュ構造を使用して、多くのことを助け、高い読み出し速度は、このような圧縮テーブル、データ圧縮短い記憶装置として、記憶されたデータが最適化されるいくつかの特殊なデータ構造であり、ここでも、読むスピードを命じられたデータ構造を使用して、テーブルをジャンプします。
5.もう一つのポイントは、非ブロッキング実行モードのより効率的な内部使用のRedisのイベントスプリッタ自身の実装では、処理能力が比較的大きいです。
ます。https://juejin.im/post/5cf5ec11f265da1b8e708b7aで再現