【せんけいかかのうせい】
線形化可能性 とは?
最終更新:
💡 重なる操作も、実時間の順序を守る一列に並べられる
並行する操作が、それぞれ呼び出しから応答までの間の一瞬で起きたように見え、対象の仕様と実時間の前後関係を守って一列に並べられる性質。
📌 このページのポイント
- 各操作が呼び出しから応答までの間の一点で起きたように見える
- 操作Aの応答後にBが呼び出されたなら、並べた順序もAが先
- 結果は対象の仕様に合う必要があり、同時に重なる操作の順序は一意とは限らない
- 複製したデータでは、ネットワーク分断中も全ノードが常に応答する保証と両立しない
線形化可能性って何なの?
同時に動く操作が、順番に一つずつ実行されたように見える性質だよ。各操作が呼び出しから応答までの間の一点で起きたと考え、対象の仕様に合う一列の順序を作れる。その一点を線形化点と呼ぶんだ。
書き込みと読み取りなら、どうなるの?
一つの値を読む・書く対象を考えよう。値を1に書く操作が完了し、そのあと読み取りを始めたなら、間に別の書き込みがない限り1が返る。書き込み後にさらに値が変わった場合は、その変更も含めた順序で考えるんだ。
書き込みと読み取りが重なったら?
その二つには、完了後に始まるという前後関係がないよ。読み取りが先だったと考えて変更前の値を返すことも、書き込みが先だったと考えて1を返すこともある。ただし、全体として矛盾のない順序と結果にならなければならないんだ。
複製したデータにも使える?
使えるけれど、分断した全ノードが常に応答する保証とは両立しないよ。たとえば、更新を受け取れない側が読み取りに古い値を返すと、完了済みの書き込みとの順序を守れない場合がある。応答を待たせるなど、保証と応答可能な範囲の調整が必要になるんだ。
もっと詳しく知りたい人へ
対象は、単一の数値だけ?
いいえ。キューやレジスタなど、対象の仕様に沿って操作の順序と結果を考えます。原論文では、個々のオブジェクトの線形化可能性を組み合わせられる性質も示されています。一つの値の読み書きは、その考え方を説明する例です。
まとめ:ざっくりこれだけ覚えればOK!
「線形化可能性」って出てきたら「同時操作を、仕様と実時間の順序を守る一列に並べられる性質」と思えればだいたいOK!
📖 おまけ:英語の意味
「Linearizability」 = 線形化可能性
💬 並行に走る操作を、1本の時間軸の上に一列(linear)に並べ直せることから付いた名前だよ。HerlihyとWingが1990年の論文で定式化したんだ