検索
ホームページデータベースRedisRedis がシングルスレッドなのはなぜですか?

Redis がシングルスレッドなのはなぜですか?

これまでは常に誤解がありました。高性能サーバーはマルチスレッドで実装する必要があると考えられていました。

理由は非常に単純で、誤解によるものです。 2: マルチスレッドはシングルスレッドよりも優れている必要があります スレッドは非常に効率的です。実際には違います。

redis coreすべてのデータがメモリ内にある場合、シングルスレッド操作が最も効率的になる理由は何ですか? マルチスレッドの本質は、CPU が複数のスレッドをシミュレートすることだからです。このシミュレートされた状況にはコンテキスト スイッチングという代償が伴いますが、メモリ システムの場合、コンテキスト スイッチングを使用しない場合が最も効率的です。

Redis は単一の CPU を使用してメモリ データをバインドし、このメモリ内のデータに対する複数回の読み取りと書き込みはすべて 1 つの CPU で行われるため、単一の CPU で実行されます。 -スレッドプロセス、この問題。 メモリの場合、このソリューションが最適なソリューションです。 (推奨:「redis ビデオ チュートリアル 」)

CPU コンテキストの切り替えには約 1500ns かかるためです。

メモリから 1MB の連続データを読み取るには約 250us かかります。1MB のデータが複数のスレッドによって 1000 回読み取られると仮定すると、コンテキスト スイッチが 1000 回発生します。

その場合、1500ns * 1000 になります。 = 1500us。単一スレッドで 1MB のデータを読み取るのに 250us しかかかりません。時間コンテキストを切り替えるだけでも 1500us かかります。毎回少しのデータを読み取るのに費やす時間は含まれていません。

マルチスレッド ソリューションを使用する必要があるのはどのような場合ですか?

答えは、下部のストレージは遅いということです。たとえば、ディスク

メモリは、非常に高い IOPS を持つシステムです。メモリの一部を申請したい場合は、メモリの一部を申請します。メモリの一部を破壊する場合は、メモリを破壊します。記憶の一部です。記憶を申請したり破壊したりするのは非常に簡単です。さらに、メモリのサイズを動的に適用できます。

ディスクの特性は次のとおりです。IPOS は非常に低いですが、スループットは非常に高いです。これは、最高のパフォーマンスを実現するには、多数の読み取りおよび書き込み操作をまとめてディスクに送信する必要があることを意味します。なぜ?

IOPS が非常に高いため、メモリ内にトランザクション グループ操作 (つまり、書き込み、読み取り、書き込み、読み取り、書き込みなどの複数の分離されたトランザクション リクエスト、つまり 5 つの操作が一緒になったもの) があるとします。 1 つずつ完了することもできますが、ディスク上にこのリクエスト メソッドも存在する場合、

私の最初の書き込み操作は次のように完了します。まず、ハードディスク内のアドレスをシークします。これには約時間がかかります。 10 ミリ秒後、「データの一部には 1 ミリ秒かかる場合がある」を読み取り、それを再度計算して (無視して)、ハードディスクに書き戻すと、さらに 10 ミリ秒かかり、合計 21 ミリ秒かかります。

2 番目操作の読み取りには 10 ミリ秒かかり、3 番目の操作の書き込みには 21 ミリ秒かかります。その後、読み取りが 10 ミリ秒、書き込みが 21 ミリ秒かかりました。5 つのリクエストには合計 83 ミリ秒かかりました。これは依然として最も理想的な状況です。メモリ内にあれば、 1ms未満であること。

したがって、このような大きなスループットを持つディスクの場合、最善の解決策は間違いなく N 個のリクエストを 1 つのバフにまとめてから、それらをまとめて送信することです。

メソッドは非同期を使用します。リクエストを処理スレッドにバインドしません。リクエスト元のスレッドはリクエストをバッファに入れ、バッファがほぼいっぱいになるまで待機してから、処理スレッドがリクエストを処理します。バフ。次に、このバフを使用してディスクへの書き込みまたはディスクの読み取りを均一に行うため、効率が最も高くなります。これが Java の IO の仕組みではないでしょうか ~

この処理方法は、遅いデバイスに最適です。遅いデバイスには、ディスク、ネットワーク、SSD などが含まれます。

スレッドと非同期これらの問題に対処する方法は非常に一般的で、有名な netty が行っているものです。

ようやく、redis がシングルスレッドである理由と、シングルスレッドとマルチスレッドをいつ使用するかが明確になりました。実際、これも非常に単純なことですが、基礎が整っていないと非常に恥ずかしいことです。良い。 。 。 。 。

Biyifa マスターの名言: シングルコア CPU がメモリにバインドされているときに最も効率的である理由について話しましょう

「オペレーティング システムの負荷分散をさせることはできません。なぜなら、私たちは自分自身の負荷を知っているからです。」デフォルトでは、単一のスレッドはシステム コールを行うときに CPU コアをランダムに使用します。Redis を最適化するために、ツールを使用して単一のスレッドを実行できます。スレッド 固定 CPU コアをバインドして、不必要なパフォーマンスの損失を軽減します。

Redis はシングルプロセスモデルのプログラムであり、マルチコア CPU を最大限に活用するために、1 台のサーバー上で複数のインスタンスを起動することがよくあります。 切り替えコストを削減するには、各インスタンスが実行されている CPU を指定する必要があります。

Linux では、タスクセットはプロセスを特定の CPU にバインドできます。スケジューラがプログラムを愚かにスケジュールすることを避けるため、またはマルチスレッド プログラムでのキャッシュ無効化のオーバーヘッドを避けるために、オペレーティング システムよりもプログラムのことをよく知っています。

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

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

Redisは、高性能と柔軟性のためにSQLデータベースを超えています。 1)Redisは、メモリストレージを介して非常に速い読み取りおよび書き込み速度を実現します。 2)複雑なデータ処理に適したリストやコレクションなど、さまざまなデータ構造をサポートしています。 3)シングルスレッドモデルは開発を簡素化しますが、高い並行性はボトルネックになる可能性があります。

Redis:従来のデータベースサーバーとの比較Redis:従来のデータベースサーバーとの比較May 07, 2025 am 12:09 AM

Redisは、並行性が高く、遅延の低いシナリオの従来のデータベースよりも優れていますが、複雑なクエリやトランザクション処理には適していません。 1.Redisは、メモリストレージ、高速読み取り速度、および高い並行性と低遅延の要件に適しています。 2.従来のデータベースは、ディスクに基づいており、複雑なクエリとトランザクション処理をサポートし、データの一貫性と永続性が強い。 3. Redisは、従来のデータベースのサプリメントまたは代替品として適していますが、特定のビジネスニーズに応じて選択する必要があります。

Redis:強力なメモリデータストアの紹介Redis:強力なメモリデータストアの紹介May 06, 2025 am 12:08 AM

redisisahigh-performancein-memorydatastructurturturestorettorethatedcelsinsinsinsversility.1)itsupportsvariousdatastructureslikestrings、lists、andsets.2)redisisaninmorydatabasewithpersistenceoptions、daturing datasafety.3)

Redisは主にデータベースですか?Redisは主にデータベースですか?May 05, 2025 am 12:07 AM

Redisは主にデータベースですが、単なるデータベース以上のものです。 1.データベースとして、Redisは持続性をサポートし、高性能のニーズに適しています。 2。キャッシュとして、Redisはアプリケーションの応答速度を改善します。 3。メッセージブローカーとして、Redisはリアルタイム通信に適したPublish-Subscribeモードをサポートしています。

Redis:データベース、サーバー、または他の何か?Redis:データベース、サーバー、または他の何か?May 04, 2025 am 12:08 AM

redisisamultifaCetedTooltoToolvesSasadatabase、server、andmore。

Redis:その目的と主要なアプリケーションを発表しますRedis:その目的と主要なアプリケーションを発表しますMay 03, 2025 am 12:11 AM

Redisisanopen-Source、In-MemoryDatastructurestoreStoreSadatabase、Cache、AndmessageBroker、ExcellingInspeedandversatility.ItisisWidely-susederCaching、Real-Timeanalytics、Session Management、AndleaderboardsdueTotutsuptorututrututrututruturturturturturturesturesaddataacys

Redis:キー価値データストアのガイドRedis:キー価値データストアのガイドMay 02, 2025 am 12:10 AM

Redisは、データベース、キャッシュ、メッセージブローカーとして使用されるオープンソースメモリデータ構造ストレージであり、高速応答と高い並行性が必要なシナリオに適しています。 1.Redisはメモリを使用してデータを保存し、マイクロ秒の読み取り速度と書き込み速度を提供します。 2.文字列、リスト、コレクションなどのさまざまなデータ構造をサポートします。3。Redisは、RDBおよびAOFメカニズムを介してデータの持続性を実現します。 4.シングルスレッドモデルと多重化テクノロジーを使用して、リクエストを効率的に処理します。 5.パフォーマンス最適化戦略には、LRUアルゴリズムとクラスターモードが含まれます。

Redis:キャッシュ、セッション管理などRedis:キャッシュ、セッション管理などMay 01, 2025 am 12:03 AM

Redisの関数には、主にキャッシュ、セッション管理、その他の機能が含まれます。1)キャッシュ関数はメモリを介してデータを保存して読み取り速度を向上させ、eコマースWebサイトなどの高周波アクセスシナリオに適しています。 2)セッション管理関数は、分散システムでセッションデータを共有し、有効期限のあるメカニズムを通じて自動的にクレンジングします。 3)リアルタイムメッセージプッシュおよびマルチスレッドシステムおよびその他のシナリオに適した、パブリッシュサブスクライブモード、分散ロック、カウンターなどのその他の機能。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境