次のコラム Redis チュートリアル では、Redis がシングルスレッドである理由と、高い同時実行性と高速性の 3 つの主な理由を紹介します。困っている友達に!
2.redis はシングルスレッドであるため、大量のコンテキスト切り替えスレッド時間の必要性;
3.redis は多重化テクノロジーを使用しており、同時接続を処理できます。ノンブロッキング IO の内部実装では、epoll 自体によって実装された単純なイベント フレームワークを使用して epoll を使用します。 epoll での読み取り、書き込み、クローズ、接続はすべてイベントに変換され、epoll の多重化機能を使用して io に時間を無駄にすることはありません。
Redis はメモリベースの操作であるため、CPU は Redis のボトルネックではありません。最も大きなボトルネックは、マシンのメモリのサイズまたはネットワーク帯域幅である可能性があります。シングルスレッドは実装が簡単で、CPU がボトルネックにならないため、シングルスレッド ソリューションを採用するのは合理的です。
2. パフォーマンス指標
redis のパフォーマンスについては、公式サイトにも記載されていますが、通常のノートブックであれば、1 秒あたり数十万のリクエストを簡単に処理できます。
3. 詳細な理由
1) さまざまなロックによるパフォーマンスの消費が不要です
Redis のデータ構造は単純な Key-Value だけではなく、リストやハッシュなどの複雑な構造も含まれています。長いリストの末尾に要素を追加したり、ハッシュにオブジェクトを追加または削除したりするなど、きめ細かい操作が実行されます。これらの操作では大量のロックの追加が必要になる場合があり、その結果、同期オーバーヘッドが大幅に増加します。
つまり、シングル スレッドの場合は、さまざまなロックの問題を考慮する必要がなく、ロック操作やロック解除操作がなく、デッドロックの可能性によるパフォーマンスの消費もありません。
2) シングル スレッド マルチプロセス クラスター ソリューション
シングル スレッドの能力は実際に非常に強力であり、各コアの効率も非常に高いです。マルチ スレッドには、当然、シングル スレッドよりも高いパフォーマンス制限が発生する可能性があります。 -スレッド化が可能ですが、今日のコンピューティング環境では、単一マシンのマルチスレッド化の上限でさえニーズを満たせないことがよくあります。さらに検討する必要があるのは、マルチサーバー クラスタリング ソリューションです。マルチスレッド化テクノロジはまだ利用できません。これらのソリューションでは。
シングルスレッド、マルチプロセスクラスターは流行のソリューションです。
3) CPU 消費
単一スレッドを使用して不必要なコンテキストの切り替えや競合状態を回避し、マルチプロセスやマルチスレッドによって CPU を消費する切り替えはありません。
しかし、CPU が Redis のボトルネックになった場合、またはサーバーの他の CPU コアをアイドル状態にしたくない場合はどうすればよいでしょうか?
さらにいくつかの Redis プロセスを開始することを検討できます。Redis はリレーショナル データベースではなくキーと値のデータベースであり、データ間に制約はありません。どのキーがどの Redis プロセスに配置されているかをクライアントが区別できれば問題ありません。
さまざまなロックを考慮する必要がない問題は、ロック操作やロック解除操作がなく、デッドロックの可能性によるパフォーマンスの消費がありません
マルチプロセスまたはマルチスレッドによる切り替えによる CPU の消費がありません
シングルプロセスおよびシングルスレッドの欠点
使用できないマルチコア CPU のパフォーマンスは、単一マシン上で複数の Redis インスタンスを開くことで向上できます。
IO 多重化テクノロジ
redis はネットワーク IO 多重化テクノロジを使用して、高いパフォーマンスを保証します。複数の接続時のシステムのスループット。
マルチチャネル - 複数のソケット接続を指します。多重化 - 1 つのスレッドを再利用することを指します。主な多重化テクノロジには、select、poll、epoll の 3 つがあります。 epoll は、利用可能な最新かつ最高の多重化テクノロジです。
ここで、「マルチチャネル」は複数のネットワーク接続を指し、「再利用」は同じスレッドを再利用することを指します。マルチチャネル I/O 多重化テクノロジの使用により、単一のスレッドで複数の接続リクエストを効率的に処理でき (ネットワーク IO の時間消費を最小限に抑えます)、Redis はメモリ内のデータを非常に高速に処理します (ここではメモリ内操作は問題になりません) ).パフォーマンスのボトルネック)、主に上記 2 点が Redis の高スループットに貢献します。
上記は、Redis の高い同時実行性と高速性について詳しく説明しています。
以上がRedisがシングルスレッドである理由と、同時実行性と速度が高い3つの主な理由を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。