[解決済み】Redisはシングルスレッドですが、同時I/Oはどのように行うのですか?
質問
Redis の基本を理解しようとしたところ、興味深いものに出会いました。 ブログ記事 .
著者はこう語る。
Redisはepoll/kqueueでシングルスレッド化され、I/Oの並行性という点では無限にスケールします。
私はきっとスレッドというものを誤解しているのでしょう、この発言には不可解さを感じます。もしプログラムがシングルスレッドなら、どうやって同時並行的に何かを行うのでしょうか?サーバーがシングルスレッドなら、Redisのオペレーションがアトミックであることがなぜそんなに素晴らしいのでしょうか?
どなたか、この問題に光を当てていただけませんか?
解決方法を教えてください。
それは、並行処理をどのように定義するかによります。
サーバーサイドのソフトウェアでは、並行処理と並列処理は異なる概念として扱われることが多い。サーバにおいて同時入出力をサポートするということは、1台の計算ユニットで複数のクライアントに対応する複数のフローを実行し、複数のクライアントにサービスを提供できることを意味します。ここでいう並列性とは、サーバーが(複数の計算ユニットで)同時に複数のことを実行できることを意味し、これは異なるものである。
例えば、バーテンダーは一度に1つの飲み物しか用意できないのに、何人ものお客さんの面倒を見ることができます。つまり、バーテンダーは並列処理を行わずに同時並行処理を行うことができるのです。
この問題は、ここでも議論されています。 並行処理と並列処理の違いは何ですか?
こちらもご覧ください 本プレゼンテーション ロブ・パイク
シングルスレッド・プログラムは、I/O(デ)マルチプレクシング・メカニズムとイベント・ループ(これはRedisが行うものです)を使用することによって、I/Oレベルで確実に並行性を提供することができます。
並列処理にはコストがかかります。最近のハードウェアでは、マルチソケット/マルチコアを採用しているため、スレッド間の同期が非常に高価になります。一方、Redisのような効率的なストレージエンジンのボトルネックは、CPUよりもネットワークであることが非常に多いのです。したがって、(同期を必要としない)分離されたイベントループは、効率的でスケーラブルなサーバーを構築するための優れた設計であると考えられています。
Redisの操作がアトミックであることは、単にシングルスレッドのイベントループの帰結です。興味深い点は、アトミック性が余分なコストなしに提供されることです(同期を必要としない)。ユーザはこれを利用して、同期のオーバーヘッドを支払うことなく楽観的ロックや他のパターンを実装することができます。
関連
-
[解決済み] スレッドコンテンションとは何ですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Redisですべてを削除するには?
-
[解決済み] Redisを使用してパターンに一致するキーをアトミックに削除する方法
-
[解決済み] redis-serverを停止するにはどうすればよいですか?
-
[解決済み】C#のイベントとスレッドセーフについて
-
[解決済み】すべてのRedisデータベースをリストアップする方法?
-
[解決済み】並行処理、並列処理、非同期メソッドの違いは何ですか?
-
[解決済み】Redisサーバーのバージョンを確認する
-
[解決済み】Redisはシングルスレッドですが、同時I/Oはどのように行うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] スレッドコンテンションとは何ですか?
-
[解決済み] Dask: dask delayでどのようにコードを並列化するか?
-
[解決済み] "フリースレッド "と "スレッドセーフ "の違いについて
-
[解決済み] デッドロックとは何ですか?
-
[解決済み] 初心者のためのアトミック操作とは?
-
[解決済み] 並行処理と並列処理の違いは何ですか?
-
[解決済み】Node.jsに対するHaskellの対応について教えてください。
-
[解決済み】糸と繊維の違いは何ですか?
-
[解決済み】並行処理、並列処理、非同期メソッドの違いは何ですか?
-
[解決済み】Redisはシングルスレッドですが、同時I/Oはどのように行うのですか?