高い同時実行処理をrddis

参考:https://www.cnblogs.com/wanlei/p/10464517.html

Redisの高い同時実行処理について

高並行性と高速な理由のRedis

1.Redisは、メモリベースで、非常に高速なメモリの速度を読み取りおよび書き込み。

2.Redisはシングルスレッドで、スレッドコンテキストスイッチ時間の多くを排除します。

多重化技術を使用して3.Redisは、同時接続を処理することができます。内部はのepoll +は、独自の実装のためのシンプルなイベントフレームワークを使用して、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はそれを処理した上でどのキーを区別する。

IO多重化

多重化技術を使用して、RedisのIOネットワークは、複数の接続、ハイスループットシステムを確実にします。

多重 - 多重化、ソケット接続の複数を意味する - 多重スレッドを指します。選択し、投票、ファイルディスクリプタ:三つの主要な多重化技術があります。epollは、最新の多重化技術は、現在最高です。

ここで、同じスレッドを再利用することを指す「多重化」、複数のネットワーク接続を意味する「多重化」。メモリにシングルスレッド接続要求(IOネットワークによって消費される時間を最小限に抑える)複数の処理効率的な可能な技術、及びデータを多重化するマルチチャネルI / O Redisの動作が非常に高速である(メモリ動作内ここではありませんパフォーマンスのボトルネック)、上記の二つの主要なRedisのは、高スループットで作成されました。

並行性の高い迅速な概要をRedisの

  1. Redisのは純粋なインメモリ・データベースで、一般的に簡単なアクセス動作している、スレッドは多くの時間を取る、時間を過ごしたので速い速度を読んで、IOに焦点を当てました。

  2. 記述子をポーリングするために単一のスレッドを使用して、多重化する非ブロックIO、IOを使用して、あなたのRedisをIOの状況を伝えるために、近くに、データベースを開いて読み、書きます、スレッドの切り替え時間を短縮、イベントに変換され、スイッチングおよび競争。

  3. アトミック操作の各々はまた、コンテキストスイッチと競争スレッドを減少させることを確実にするために、シングルスレッドモデルを使用してのRedis。

  4. さらに、データ構造はまた、Redisの全体ハッシュ構造、高い読み出し速度を用いて、多くのことを助け、いくつかの特別なデータ構造があり、保存されたデータは、データ圧縮ショートを格納する、そのような圧縮テーブルとして、最適化され、別の例高速読み取りに命じたデータ構造を使用して、ジャンプテーブル、。

  5. 別のポイント、ノンブロッキング実行モードのより効率的な内部使用のRedisのイベントスプリッタ自身の実装では、処理能力が比較的大きいです。

おすすめ

転載: www.cnblogs.com/zanao/p/11877331.html