sql >> データベース >  >> NoSQL >> Redis

Redisはシングルスレッドですが、同時I / Oをどのように実行しますか?

    それは、並行性をどのように定義するかによって異なります。

    サーバー側のソフトウェアでは、並行性と並列性はしばしば異なる概念と見なされます。サーバーでは、同時I / Oをサポートするということは、サーバーが1つの計算ユニットだけでそれらのクライアントに対応する複数のフローを実行することによって複数のクライアントにサービスを提供できることを意味します。このコンテキストでは、並列処理とは、サーバーが(複数の計算ユニットを使用して)同時に複数のことを実行できることを意味しますが、これは異なります。

    たとえば、バーテンダーは一度に1つの飲み物しか準備できないのに、複数の顧客の面倒を見ることができます。したがって、彼は並列処理なしで並行性を提供できます。

    この質問はここで議論されています:並行性と並列性の違いは何ですか?

    RobPikeによるこのプレゼンテーションも参照してください。

    シングルスレッドプログラムは、I / O(逆)多重化メカニズムとイベントループ(Redisが行うこと)を使用することで、I/Oレベルでの同時実行性を確実に提供できます。

    並列処理にはコストがかかります。最新のハードウェアに見られる複数のソケット/複数のコアを使用すると、スレッド間の同期に非常にコストがかかります。一方、Redisのような効率的なストレージエンジンのボトルネックは、CPUよりかなり前のネットワークであることがよくあります。したがって、分離されたイベントループ(同期を必要としない)は、効率的でスケーラブルなサーバーを構築するための優れた設計と見なされます。

    Redis操作がアトミックであるという事実は、単にシングルスレッドのイベントループの結果です。興味深い点は、原子性が追加コストなしで提供されることです(同期は必要ありません)。ユーザーはこれを利用して、同期のオーバーヘッドを支払うことなく、楽観的なロックやその他のパタ​​ーンを実装できます。



    1. MongoDB $ push

    2. MongoDBとPostgreSQLの考え

    3. MongoDBのローカルタイムゾーンで日付でグループ化

    4. マングーススキーマで別のスキーマを参照するにはどうすればよいですか?