前に起こった因果関係


7

私はLamportの「時間、クロック、および分散システムにおけるイベントの順序付け」を読んでいて、私を悩ませている詳細があります。

ランポートは、「以前に起こった」半順序を定義しています。次に彼は、「定義を表示する別の方法は、a-> bは、イベントaがイベントbに因果的に影響を与える可能性があることを意味する」と言います。

ここで、aがbの前に発生するような、プロセスP1でのメッセージ受信である2つのイベントaとbを考えます。さらに、aとbがP1で発生した2つのイベントだけであると仮定します。前に発生したリレーションの定義によれば、a-> bがあります(P1がこれらのイベントをこの順序で監視しているため、これは理にかなっています)。

ただし、イベントaがイベントbに因果的に影響を与える可能性があるかどうかはわかりません。これらの2つのイベントはまったく無関係であり、異なる順序で発生した可能性があります。

ここで何が欠けていますか?

回答:


3

因果関係はこの論文では未定義の用語であることに注意してください。ランポートは非​​公式の説明でそれを使用しています。彼は因果的に影響を与える可能性があると直感的に理解できる概念であり、読者にとっても彼と同じことを意味すると想定しています。私はランポートのためだと思う因果的に影響を与える可能性があり実際にはもっと何か意味情報が流れる可能性からにまたはの行動影響を与える可能性がする古典的なアリストテレスの考え方よりも、の物理的な結果ですa baba bb a

たとえば、コンピュータが次の2つのステートメントを含むプログラムを実行しているとします。

a: X := 1
b: print X

私たちは、すべてのその文が同意すると思うa 前に起こる bが、私はそれは、「代入文(イベントを実行することは言わないだろうa原因実行するプログラムprintのステートメント(イベントb)」。一方、私は少し異なる何かを言うかもしれません:「イベントa(値1にを割り当てるX)は、イベントによって出力される値に影響を与えたb」。

次に、(潜在的に)もっと物議を醸す例を見てみましょう。

a: X := 1
b: Y := 1

a 前に起こる bが、私は、ほとんどの人が言うと思う「との間には因果関係がないaとはb。」しかし、この論文では、との間には因果関係がaありbます。私はこれをできるだけ簡潔に説明するつもりですが、長くなるでしょう。

紙はステートマシンについてです

ここだランポートが彼のホームページ上の紙について言いたいこと

分散システムは、プロセッサのネットワークで実装される特定のシーケンシャルステートマシンとして説明できます。入力要求を完全に順序付ける機能は、すぐにアルゴリズムにつながり、プロセッサのネットワークによって任意の状態マシンを実装します。したがって、分散システムを実装します。そこで、私はこの文書を書きました。これは、任意の分散状態マシンを実装する方法についてです。...

これは私の最も頻繁に引用される論文です。...しかし、この論文がステートマシンについて何も述べていないことに気づいた人はほとんどいない。分散システムにおけるイベントの因果関係か、分散相互排除の問題のどちらかだと人々は考えているようです。紙にはステートマシンについては何もないと主張されています。私は自分が書いたものを本当に覚えていると自分に納得させるために戻ってそれを読み直す必要さえありました。

プロセスは状態マシンであり、分散システム/アルゴリズムへのプロセスの構成は状態マシンです。

Lamportは、デジタル設計ではレジスタ転送と呼ばれる簡略表記を暗黙的に使用しており、各プロセスは(暗黙的に)アルゴリズムステートマシンです。私たちが本当に気にしているのは、各イベントが各プロセスの状態全体にどのように影響するかです。各レジスタ転送ステートメントは、前の状態に依存する一連の状態遷移について話す簡潔な方法です。

したがって、「論争の的」な例では、マシンの状態には2つの部分ます。レジスタ転送ステートメントは、4つの異なる状態遷移の省略形です:、、、および。したがって、ステートメントで起こったことは、ステートメントによって生成される最終的な状態に非常に影響します。私たちのケースでは、最終的な状態がであることを知っています。これは、実行されなかった場合や、X,YY := 10,00,10,10,11,01,11,11,1ab1,1aa(のようなX := 0)別の文でした。

このホワイトペーパーでは、分散状態マシンの1つが他の状態マシンの状態をどれだけ知ることができるかについて説明しているため、個々のマシンで発生する順序が非常に重要です。


それは私がランポートの「因果関係の可能性」の非公式な定義を解釈する方法でもあります。しかし、最初の例では、aとbはメッセージ受信です。したがって、aがbに影響を与える可能性のある方法はありません。
Nemo

4

@kramthegramと@Wandering Logicの両方で指摘されているように、イベント "happened before"イベントは、が物理的に(発生)を引き起こしことを意味しませabab

ランポートの論文で使用されているこのような因果関係は、潜在的因果関係と呼ばれることがよくあります。すべての可能性をキャプチャし、多くの場合、巨大な因果関係グラフを生成します。実際には、分散システムのスケーラビリティ/パフォーマンスを破壊します。

これらの問題に対処するには、明示的な因果関係、またはアプリケーション固有の因果関係を考慮することができます。一般的な例の1つはソーシャルネットワークアプリケーションです。アリスは会話スレッドで100件のコメントを読み、そのうちの5件に単一のコメントで返信しました。彼女のコメントの即時発生前依存関係は、これらの5つのコメントのみで構成できます(原因となる可能性のあるこれらすべての100のコメントの代わりに)

どちらがより良い因果関係ですか?まあ、それは異なります。たとえば、マルチスレッドプログラムのデバッグの研究分野では、潜在的な因果関係が広まっています。(私の意見では)2つの主な理由があります。1つ目は、2つのイベント(または操作)が因果関係にあるかどうかを示すコンテキスト/セマンティクスがないことです。次に、イベント間のすべての因果関係をキャプチャし、できるだけ多くのデバッグを明らかにします。readwrite

詳細な議論のために潜在的な因果関係、明示的な因果関係は、以下を参照してください。この論文:因果一貫性と明示的なソリューションの潜在的な危険性を


2

可能な単語の選択がありません。これは、ことは可能であるだけであること、関係は実際に因果であることを意味するものではありません上の因果効果持っているBを。彼の発言は誤りではなく、あなたは彼が実際に述べている以上にそれらを読んでいるだけです。それが可能だからといって、それが本当であるとは限りません。あればより強力な声明は、逆の進行せず、bはそれは不可能のために影響を及ぼす因果持っているB。それは言い回しの問題です。


しかし、ここでは、aとbを因果関係で関連付けることは不可能です(私が何かを誤解しない限り)。あなたの論理に従って、すべてのイベントを関連付ける関係Rは、「R(a、b)はイベントaがイベントbに因果的に影響を与える可能性があることを意味します」、そしてあなたはそれが正しく聞こえないことに同意します。
Nemo

1
たぶん、彼はイベントaとbをプロセスP1で発生したものと見なし、それらが外部コンテキストによって引き起こされているという余分な情報を無視しています。その場合、aがイベントbに影響を与えた可能性があります。
Nemo

正確には、AがBに影響を与えることできるのは、A Bに影響することだけではありません。AがBの後に発生した場合、プロセスはBが発生したときのAの状態を認識できなかったため、 Aからの情報を使用したBの決定。ただし、AがBの前に発生した場合、Aの知識があり、Aの影響を受ける可能性があります。
cmaynard 2015年

@Nemo元の論文で例を確認していませんが、ここで述べたことから、aがbに影響を与える可能性があります。aを受け取った場合、Pがクラッシュまたはストールするbは起こりません。この動作は、すべてのモデルで可能なわけではありません。
Gilles「SO-邪悪なことをやめなさい」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.