Concurrency isn';加油站没有锁吗?关于下面的erlang文章以及为什么世界上没有锁

Concurrency isn';加油站没有锁吗?关于下面的erlang文章以及为什么世界上没有锁,concurrency,erlang,Concurrency,Erlang,本文 据说: “世界是并行的。它是平行的。世界各地都有事情发生 我不能在高速公路上开车,如果我 不直观地理解并发的概念;纯粹的 消息传递并发性是我们一直在做的事情。” 我不明白我不认为这是正确的当我把车开进一个加油站时,我等前面的人把油箱加满,因为他正在使用(锁上)加油站。有人认为我说的不对吗?最简单的答案是,这只是一个类比。这一段是关于为什么并发性很重要,为什么它不像一开始想象的那么不直观,它来自一个过程编程世界(参见?我说的是“世界”,但我的意思是“背景”或“上下文”,很容易混合隐喻) 无论

本文 据说:

“世界是并行的。它是平行的。世界各地都有事情发生 我不能在高速公路上开车,如果我 不直观地理解并发的概念;纯粹的 消息传递并发性是我们一直在做的事情。”


我不明白我不认为这是正确的当我把车开进一个加油站时,我等前面的人把油箱加满,因为他正在使用(锁上)加油站。有人认为我说的不对吗?

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


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

只有在你不仔细检查的情况下,气体等才是流体。如果你想用连续函数来描述事物,你需要一个大样本。如果看得太近,流体近似将崩溃。反过来说,如果你缩小得足够远,你可以把(如)颗粒当作液体

事实上,这些东西是由不可分割的单元组成的,这些单元具有量化的、确定性的行为,这并不能阻止流体动力学方程在宏观层面上精确地减少它们

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

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

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

加油站只是一个加油的地方。人们如何决定确保一次只有一个人使用它是另一回事。在共享状态语言中,您可能有一个气体站实例,当您想要使用它时,可以将其锁定。在消息传递语言中,您可以向加油站发送消息“有人在使用您吗?”并且加油站将回答“是”或“否”。您可以通过任何一种方式实现相同的基本目标


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

“我们通过在加油站礼貌地等待我们前面的人来解决问题。”-如果你等待,那不是锁吗?我以为erlang没有锁…Jason,那你错了
receive
是一种锁,因为它会在收到消息之前阻塞。如果您向进程发送消息,然后执行
接收
以等待回答,那么您已经有效地实现了互斥锁。Emil,在等待加油站清空时,我可以不使用任何类型的“锁”吗?我想理解这篇文章的概念,它看起来像是说不需要锁,我想知道如果这是真的,我用加油站作为一个现实世界的例子,看看我不需要锁一个共享资源。声明是,如果我用erlang“编程”我的生活,世界是不变的,我不需要任何锁,那怎么能应用到加油站的例子中呢?谢谢,我觉得这是。更接近。我想了解的是。你能澄清一下吗“重要的区别是,Erlang中的每个状态都有一个进程负责,但是任何数量的线程都可能影响具有可变锁定数据的状态。如果重要的区别是,Erlang中的每一个状态都有一个进程负责,但是任何数量的线程都会对具有可变锁定数据的状态块产生影响。“我正在尝试想出一个好的例子。我将看看明天是否可以发布它。