この記事では、Redis のシングルスレッド リアクター モデル、I/O モデル、マルチスレッド I/O モデルについて説明します。
#redis の高いパフォーマンス
純粋なメモリ アクセス、すべてのデータはメモリ内にあり、すべての操作はメモリに対して行われます-レベルの操作では、メモリの応答時間はナノ秒レベルです。したがって、redis プロセスの CPU には基本的にディスク I/O 待ち時間やメモリの読み書きパフォーマンスの問題は発生せず、CPU がボトルネックになることはありません (メモリ サイズとネットワーク I/O が redis のボトルネックになります)。 、クライアントとサーバー間のギャップ、ネットワーク伝送遅延)。 [関連する推奨事項: - Redis ビデオ チュートリアル ]
はシングル スレッド モデルを採用しており、シングル スレッドの実装は簡単です。複数のスレッドやロックなどの同期メカニズムの頻繁なコンテキスト切り替えによって引き起こされるオーバーヘッドを回避します。- シンプルで効率的な基本データ構造: 動的文字列 (SDS)、リンク リスト、辞書、ジャンプ リンク リスト、整数セット、圧縮リスト。次に、redis はこの基盤を使用して、ユーザーが操作できるオブジェクト (文字列、リスト、ハッシュ、セット、順序付きセット、その他のオブジェクト
- リアクター モード ネットワーク イベント プロセッサ) を実装します。 I/O 多重化を使用して複数のソケットを同時に監視します。これは効率的な I/O モデルです。リアクター関連の知識については、この記事を参照してください。
- フレームワーク: Linux 高性能ネットワーク IO リアクター モデルを参照してください。
シングル スレッドを使用する理由
単一のスレッドを使用して、不必要なコンテキストの切り替えと競合状態を回避します。CPU を消費する複数のスレッドによって引き起こされる切り替えはありません。- さまざまなロックの問題を考慮する必要はありません。ロックと解放がない ロック操作で発生する可能性のあるデッドロックによるパフォーマンスの消費がない シンプルで保守性が高い マルチスレッドモードではプログラム作成がより複雑で面倒になる シングルスレッド実装は実装が簡単
-
- Redis はシングルスレッド システムですか?
Redis はネットワーク イベント処理モデル リアクターがシングルスレッドであるため、シングルスレッドであるとよく言われます。
クライアント リクエストが何百万ものキー値を削除する場合、これはこのコマンドによりブロッキングが発生する可能性があります。 Redis 4.0 では、このタイプのノンブロッキング コマンドを実装するためにマルチスレッドを導入することを選択しました。- redis6.0 バージョンでは、クライアントの I/O 読み取りおよび書き込み応答を処理するためにマルチスレッドが正式に導入されました。 、redis コマンド イベントの処理はまだメイン スレッドの単一行処理中です。
- Redis システム全体の場合は、AOF や RDB 同期などの非同期タスクを処理する他のスレッドが常に存在します
-
- redis I/O モデル
redis は、シングルスレッドの純粋なメモリ システムであるためだけでなく、処理が高速です。 Reactor モデルを採用し、I/O 多重化を使用して外部リクエストを処理し、ネットワーク接続、読み取りおよび書き込みの待ち時間を削減します。ネットワーク I/O 操作で多数のクライアント要求を同時に処理できるようにし、高スループットと高い同時実行性を実現します
redis マルチスレッド バージョンI/O モデル 6.0
プログラミング関連の知識については、プログラミング入門
をご覧ください。 !
以上がRedis 学習でシングルスレッド リアクター モデルについて語るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。