-1

在这篇文章中,Erlang 有什么大惊小怪的? 据说:

“ 世界是并发的。它是平行的。事情在同一时间发生在所有地方。如果我不直观地理解并发的概念,我就无法在高速公路上开车;我们所做的就是纯粹的消息传递并发每时每刻。”

我不明白我认为这是不正确的,当我把车开进加油站时,我等待我前面的人在他使用(锁定)加油站时完成他的油箱加满油有人认为我说的是不正确的吗?

4

3 回答 3

2

文章从来没有说“世界不需要锁”。文章说:“在 Erlang 中,鉴于没有共享状态,Erlang 程序不需要锁。” 锁是通过共享可变状态实现并发的一种方式。Erlang 通过传递消息而不是共享状态来实现并发。

加油站只是一个取油的地方。人们如何决定确保一次只有一个人使用它是另一回事。在共享状态语言中,您可能有一个加油站实例,当您想使用它时您会锁定它。在消息传递语言中,您可以向加油站进程发送消息“有人在使用您吗?” 加油站会回答是或否。无论哪种方式,您都可以实现相同的基本目标。

您可能想知道,“这对我来说听起来像是一把锁!” 重要的区别是,Erlang 中的每个状态都只有一个进程负责,但是任意数量的线程都可以影响具有可变锁定数据的状态。如果加油站状态被锁定语义破坏,你不知道是什么线程破坏了它。在 Erlang 中,您可以看到进入负责该数据的进程的每条消息,并查看哪些消息正在破坏它。这听起来像是一个无用的区别,但相信我,它使并发更容易处理。

于 2012-08-06T10:55:52.447 回答
1

最简单的答案是,这只是一个类比。那个特定的段落实际上是关于为什么并发很重要,以及为什么它不像人们一开始想象的那样不直观,来自过程编程世界(见?我说的是“世界”,但我真正的意思是“背景”或“上下文” '很容易混合隐喻)。

无论如何,我不会对那句话读得太深,我不认为这意味着(也没有明确说)世界本身是无锁的,只是世界并发的。这就是类比开始转向左边的地方。就像你我不共享状态(这是提到的),我们也不是一成不变的。你可以改变你的观点,改变你的衬衫等,而无需使用新衬衫创建新实体。正如本文其他地方所提到的,Erlang 通过使所有内容不可变来解决维护并发状态所固有的一些问题。我们通过在加油站礼貌地等待我们面前的人来解决问题。

于 2012-08-06T06:19:39.077 回答
0

气体等只有在您不仔细检查时才是流体。如果你想用连续函数描述事物,你需要一个大样本。如果你看得太近,流体近似就会失效。反过来说,如果你缩小得足够远,你可以将(例如)谷物视为流体。

这些东西实际上是由具有量化的、确定性的行为的不可分割的单位组成的这一事实并不能阻止流体动力学方程在宏观层面上准确地描述它们。

它们是流体,还是不是?答案是“是的,它们是流体。或者不是,取决于。”

模型在某些条件下适用,在其他条件下不适用。未能理解这一点会导致相信银弹,并破灭希望。

于 2012-08-06T06:30:19.387 回答