8章基本事項の紹介と概要

分散システムは、単一ノードのシステムと本質的にどのような点で異なっているでしょうか。単純な例で確認してみましょう。シングルスレッドのプログラムでは、変数と実行プロセス(一連のステップ)を定義します。

たとえば、以下に示すように変数を定義し、その変数に対して単純な算術演算を実行できます。

int i = 1;
i += 2;
i *= 2;

実行履歴は、次の一通りだけです。まず変数を宣言し、その値に2を足してから、次に2を掛けます。結果として6を得ます。この場合、これらの演算を実行しているスレッドは1つですが、その代わりに、変数xに対する読み書きのアクセス権を持つスレッドが2つあると仮定します。

8.1 並行実行

2つの実行スレッドが変数へのアクセスを許可されると、ステップがスレッド間で同期されていない限り、並行なステップ実行の正確な結果は予測不可能になります。単一の結果の代わりに、図8-1に示すように、四通りの結果が生成されます†1

[†1] インターリーブとしては、加算の前に乗算による読み取りが行われることもありますが、a)と同じ結果が生成されるので、簡略化のために省きました。

並行実行の考えられるインターリーブ

図8-1 並行実行の考えられるインターリーブ

  • a)x = 2。両方のスレッドが初期値を読み取り、加算が計算後の値を書き出すが、その値が乗算の結果で上書きされる場合。
  • b)x = 3。両方のスレッドが初期値を読み取り、乗算が計算後の値を書き出すが、その値が加算の結果で上書きされる場合。 ...

Get 詳説 データベース ―ストレージエンジンと分散データシステムの仕組み now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.