8章基本事項の紹介と概要
分散システムは、単一ノードのシステムと本質的にどのような点で異なっているでしょうか。単純な例で確認してみましょう。シングルスレッドのプログラムでは、変数と実行プロセス(一連のステップ)を定義します。
たとえば、以下に示すように変数を定義し、その変数に対して単純な算術演算を実行できます。
int i = 1; i += 2; i *= 2;
実行履歴は、次の一通りだけです。まず変数を宣言し、その値に2を足してから、次に2を掛けます。結果として6を得ます。この場合、これらの演算を実行しているスレッドは1つですが、その代わりに、変数x
に対する読み書きのアクセス権を持つスレッドが2つあると仮定します。
8.1 並行実行
2つの実行スレッドが変数へのアクセスを許可されると、ステップがスレッド間で同期されていない限り、並行なステップ実行の正確な結果は予測不可能になります。単一の結果の代わりに、図8-1に示すように、四通りの結果が生成されます†1。
[†1] インターリーブとしては、加算の前に乗算による読み取りが行われることもありますが、a)と同じ結果が生成されるので、簡略化のために省きました。
- 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.