Redisはシングルスレッドですか、それともマルチスレッドですか?



Is Redis Single Threaded



redisを学習する過程で、多くの記事でredisはシングルスレッドであると述べられていますが、公式の指示では、redis6.0でマルチスレッドが導入されていることが示されています。このために、学習プロセスを整理して記録するための多くのドキュメントを見つけました。

1.シングルスレッドをRedisします

当初、Redisはシングルスレッドモデルを採用していました。 Redisはすべてのデータをメモリに格納するメモリベースのデータベースであるため、シングルスレッド操作が最も効率的であり、マルチスレッドコンテキストスイッチングには多くの時間がかかります。 、メモリシステムの場合、単一のスレッドでより高い効率を実現できます。ただし、単一スレッドは、Redis全体が1つのスレッドのみであり、他のRedisモジュールが独自のスレッドを持っていることを意味するわけではありません。
以下に示すように:
画像



Redisは、Reactorモデルに基づいたネットワークイベントプロセッサを開発しました。このプロセッサは、ファイルイベントプロセッサと呼ばれます。これは、複数のソケット、IO多重化プログラム、ファイルイベントディスパッチャー、およびイベントハンドラーの4つの部分で構成されています。ファイルイベントディスパッチャキューの消費はシングルスレッドであるため、Redisはシングルスレッドモデルと呼ばれます。

I / O多重化メカニズムを使用して、複数のクライアントを同時に監視します。シングルスレッドモードでは、ネットワーク処理が多い場合でも、I / O多重化が存在するため、高速メモリ処理では無視できます。



2.Redisがマルチスレッドを導入する理由

Redisはメモリ操作に基づいており、CPUはパフォーマンスのボトルネックではなく、Redisのボトルネックはマシンのメモリとネットワーク帯域幅に基づいています。マルチスレッドはバージョン6.0で導入されました。
画像
このI / Oスレッドは、ネットワークデータの読み取りと書き込み、プロトコル分析など、ネットワークI / O処理での複数のスレッドの使用を指します。これは、読み取り/書き込みネットワークの読み取り/書き込みが原因です。Redisの実行中、CPU時間のほとんどが占有されます。モジュールのこの部分をマルチスレッド方式で実装すると、パフォーマンスが大幅に向上します。ただし、コマンドを実行するためのRedisのコアモジュールは依然としてシングルスレッドです。

最新バージョン6.0では、構成ファイルでI / Oマルチスレッド処理モードをオンにする必要があります。