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 シングル スレッドである必要があります。 私たちが追求するのは内部の複雑さではなく、その過程を理解し、原理を求めることですが、すべての内臓を掘り出すことはできません。
Redis 入門チュートリアル 列にアクセスして学習してください。
以上がRedis シングルスレッドを理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。