これは、並行性をどのように定義するかによって異なります。
サーバー側のソフトウェアでは、並行性と並列性はしばしば異なる概念とみなされます。サーバでは、同時I/Oをサポートすることにより、サーバは、1つの計算ユニットだけでそれらのクライアントに対応するいくつかのフローを実行することによって複数のクライアントにサービスを提供できることを意味します。このコンテキストでは、並列処理は、サーバが複数の演算ユニットを同時に使用して複数の処理を同時に実行できることを意味します。
例えば、バーテンダーは、一度に1つの飲み物しか用意できない間に、複数の顧客を見ることができます。したがって、彼は並列性を持たずに並行性を提供することができます。
この質問は、ここで議論されてきた: Concurrency vs Parallelism - What is the difference?
はロブ・パイクからもthis presentation参照してください。
シングルスレッドプログラムは、I/O(デ)多重化メカニズムとイベントループ(Redisの機能)を使用して、I/Oレベルで並行性を提供できます。
並列処理にはコストがかかります。現代のハードウェアで見つけることのできる複数のソケット/複数のコアでは、スレッド間の同期には非常にコストがかかります。一方、Redisのような効率的なストレージエンジンのボトルネックは、CPUのかなり前のネットワークであることがよくあります。したがって、独立したイベントループ(同期を必要としない)は、効率的でスケーラブルなサーバーを構築するための優れた設計と見なされます。
Redis操作がアトミックであるという事実は、単純にシングルスレッドイベントループの結果です。興味深い点は、追加コストなしで原子性が提供されることです(同期は必要ありません)。同期オーバーヘッドを支払うことなく、楽観的なロックや他のパターンを実装するために、ユーザーが悪用する可能性があります。
ニースのバーテンダーの類推:) –
これは、多くのおかげで助けになりました! –
シンプルでクリアな、ありがとう。 – harsha