web-dev-qa-db-ja.com

ステートレスシステムとステートフルシステムの違いは何ですか?また、並列性にどのように影響しますか?

ステートレスシステムとステートフルシステムの違い、および並列性に対する状態の影響を説明します。

63
Stack Guru

ステートレスシステムはボックスとして見ることができます[黒? ;)]任意の時点で、出力の値は入力の値のみに依存する[特定の処理時間後]

ステートフルシステムは、代わりに、任意の時点で出力の値が入力の値と内部状態の値に依存するボックスとして見ることができます。ステートフルシステムは、「memory」を備えたステートマシンのようなものです。同じ入力値のセットは、前に応じて異なる出力を生成できるためです。システムが受信した入力。

並列プログラミングの観点から、ステートレスシステムは、適切に実装されていれば、並行性の問題なしに複数のスレッド/タスクによって同時に実行できます[例としてリエントラント関数について考える] ステートフルシステムでは、実行アクセスの複数のスレッドが排他的にシステムの内部状態を更新する必要があるため、シリアル化[同期]ポイントが必要になります。 。

75
sergico

ステートフルサーバーは、接続間で状態を保持します。ステートレスサーバーにはありません。

そのため、ステートフルサーバーに要求を送信すると、要求する情報を追跡する何らかの接続オブジェクトが作成される場合があります。別のリクエストを送信すると、そのリクエストは前のリクエストの状態で動作します。そのため、リクエストを送信して何かを「開く」ことができます。そして、後でリクエストを送信して「閉じる」ことができます。 2つのリクエストの間では、そのことはサーバー上で「オープン」です。

ステートレスサーバーにリクエストを送信すると、リクエストに関する情報を追跡するオブジェクトは作成されません。サーバー上で何かを「開く」と、サーバーは何かを開いているという情報をまったく保持しません。 「閉じる」操作は意味がありません。閉じるものが何もないためです。

HTTPおよびNFSはステートレスプロトコルです。各リクエストは独立しています。

ステートレスプロトコルに状態を追加するためにCookieが使用される場合があります。 HTTP(Webページ)では、サーバーがCookieを送信し、その後ブラウザーが状態を保持します。その後の要求でサーバーに返送するだけです。

SMBはステートフルプロトコルです。クライアントはサーバー上のファイルを開くことができ、サーバーはクライアントが閉じるまでそのファイルへの他のクライアントのアクセスを拒否できます。

47
Henish