-1

この記事の中でErlangについてのこの騒ぎは何ですか? と言われている:

「世界は並行しています。並行しています。すべての場所で同時に発生します。並行性の概念を直感的に理解していなければ、高速道路で車を運転することはできませんでした。純粋なメッセージパッシング並行性が私たちの仕事です。いつも」

私はそれを理解していません私は私の車をガソリンスタンドに運転するときこれが正しいとは思いません私は彼がガススタンドを使用している(ロックしている)ので私の前の人が彼のガスタンクを満たし終えるのを待ちます

4

3 に答える 3

2

記事には「世界は閘門を必要としない」とは決して書かれていません。記事には、「Erlangでは、共有状態がないため、Erlangプログラムにロックは必要ありません」と書かれています。ロックは、可変状態を共有することで同時実行性を実現する1つの方法です。Erlangは、状態を共有する代わりにメッセージを渡すことで同時実行性を実現します。

ガススタンドはガスを手に入れる場所です。一度に1人だけがそれを使用していることを確認する方法は別の問題です。共有状態の言語では、使用するときにロックするガススタンドインスタンスが1つある場合があります。メッセージパッシング言語では、ガススタンドプロセスに「誰かがあなたを使用していますか?」というメッセージを送信できます。ガススタンドは「はい」または「いいえ」と応答します。どちらの方法でも同じ基本的な目標を達成できます。

「それは私には鍵のように聞こえます!」と疑問に思われるかもしれません。重要な違いは、Erlangの状態の各部分を担当するプロセスは1つだけですが、可変のロックされたデータを使用して、任意の数のスレッドが状態の一部に影響を与える可能性があることです。ガススタンドの状態がロックセマンティクスで破損した場合、どのスレッドがそれを壊したのかわかりません。Erlangでは、そのデータを担当するプロセスに入ってくるすべてのメッセージを確認し、どのメッセージがデータに損害を与えているかを確認できます。役に立たない区別のように聞こえるかもしれませんが、私を信じてください。並行性の処理がはるかに簡単になります。

于 2012-08-06T10:55:52.447 に答える
1

最も簡単な答えは、それは単なるアナロジーであるということです。その特定の段落は、並行性が重要である理由と、手続き型プログラミングの世界から来た、最初に考えるほど直感的ではない理由についてです(「世界」と言いましたが、実際には「背景」や「コンテキスト」のようなものを意味していました'比喩を混ぜるのは簡単です)。

とにかく、私はその声明をあまり深く読みません。それは、世界自体がロックレスであり、世界並行していることを意味する(または明示的に言うこともありません)ことを意味するとは思いません。そこから類推が左に曲がり始めます。あなたと私が状態を共有しないのと同じように(言及されています)、私たちも不変ではありません。新しいシャツで新しいエンティティをフォークしたり作成したりすることなく、意見を変更したり、シャツを変更したりすることができます。記事の他の場所で述べたように、Erlangはすべてを不変にすることで並行状態を維持することに固有のいくつかの問題を回避します。ガソリンスタンドで目の前の男を丁寧に待つことで解決します。

于 2012-08-06T06:19:39.077 に答える
0

ガスなどは、あまり詳しく調べない場合にのみ流体になります。連続関数で物事を記述したい場合は、大きなサンプルが必要です。よく見ると、流体近似が崩れます。逆に言えば、十分にズームアウトすると、(たとえば)粒子を流体として扱うことができます。

これらのものが実際には量子化された決定論的な振る舞いを持つ不可分な単位で構成されているという事実は、流体力学方程式がマクロレベルでそれらを正確に記述することを妨げません。

それらは流動的ですか、そうではありませんか?答えは「はい、それらは流動的です。またはそうでないかによって異なります。」です。

モデルが適用される条件と適用されない条件があります。これを理解できないと、銀の弾丸が信じられ、希望が打ち砕かれます。

于 2012-08-06T06:30:19.387 に答える