ホームページ  >  記事  >  データベース  >  Redis シングルスレッドを理解する方法

Redis シングルスレッドを理解する方法

(*-*)浩
(*-*)浩オリジナル
2019-11-28 09:13:081961ブラウズ

Redis シングルスレッドを理解する方法

Redis はソケットを介して通信します。ソケット サーバーは同時に複数のクライアント接続リクエストを受け入れることができます。つまり、redis サービスは同時に複数の Redis クライアント接続に直面します. リクエストを実行すると、redis サービス自体が単一のスレッドで実行されます。 (推奨学習: Redis ビデオ チュートリアル )

## これは、A、B、C、D、および E の 5 つのクライアントが同時に Redis リクエストを開始することを前提としています。最初のリクエストが到着し、B、C、D、E の順に到着します。この時点で、redis サーバーは A リクエストの処理を開始します。接続の確立に 30 秒かかり、リクエスト データの取得に 10 秒かかり、その後、データを処理してデータを返送するのに 0.1 秒かかります。クライアント側で 5 秒かかり、合計で約 45 秒かかります。

つまり、次の B リクエストは 45 秒待つ必要があります。これら 5 つのリクエストはほぼ同時に発生する可能性があることに注意してください。ソケットは同時に複数のリクエストを処理できるため、時間差はネットワーク接続フェーズは無視できますが、第 2 ステージでは、サーバーは何もせずに 10 秒間待機する必要があり、これは CPU とクライアントにとって耐えられません。

つまり、シングル スレッドの効率は非常に低いですが、まさにこれらの同様の問題があるため、Redis シングル スレッドは本来このようには実行されません。次に、redis の実際のシングルスレッド動作モードについて説明します。


クライアントとサーバー間の接続はソケットによって確立されます。同時に複数の接続を確立できます。 (マルチスレッド/マルチプロセスである必要があります) , 確立された接続は redis です。ご存知のとおり (なぜわかっているかというと、ソケット プログラミングに進みます。ここでも基本が非常に重要であることを強調します), 次に、redis は、次の情報に基づいて、どの接続がクライアントのリクエスト データを受信したかを検出します。これらの確立された接続。

注: どの接続が確立されたかを検出するのではなく、どの接続がリクエスト データを受信したかを検出することであり、ここでの検出アクションは単一のスレッドの開始です。データはデータ処理フェーズを開始し、データを返し、要求されたデータを受信した次のネットワーク接続の検出を続けます。

検出からデータ処理、データ返却までのプロセス全体がシングルスレッドであることに注意してください。

これは、いわゆる Redis シングル スレッドである必要があります。 私たちが追求するのは内部の複雑さではなく、その過程を理解し、原理を求めることですが、すべての内臓を掘り出すことはできません。

リクエストデータを受け付けてからネットワーク接続を検出してから最終的にデータが返されるまでの時間は5.1秒です。今回はN倍に拡大したデータです。実際の時間はさらに短くなります。これよりもしかしたら、5.1のN倍の1万分の1かもしれません。

なぜそう言えるのでしょうか? データはローカル メモリで処理されるため、その速度がどれほど速いかは想像できると思いますが、最終的に返されるデータにはネットワークが関与していますが、ネットワーク接続が確立されており、速度も高速です。非常に高速ですが、データ処理段階よりわずかに遅いだけです。したがって、実際には、シングルスレッド方式の効率について心配する必要はありません。

Redis 関連の技術記事の詳細については、

Redis 入門チュートリアル 列にアクセスして学習してください。

以上がRedis シングルスレッドを理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。