What's all this fuss about Erlang? 据说:
"世界是并发的。它是平行的。事情发生在整个地方 放在同一时间。如果我,我无法在高速公路上开车 没有直观地理解并发的概念;纯 消息传递并发是我们一直在做的事情。"
我不明白我不认为这是正确的,当我开车进入加油站我等待我前面的人完成他的油箱充满他正在使用(锁定)气站时任何人都认为我在说什么是不正确的?
答案 0 :(得分:2)
文章从未说过“世界不需要锁定”。文章说:“在Erlang中,由于没有共享状态,Erlang程序不需要锁定。”锁是通过共享可变状态实现并发的一种方法。 Erlang通过传递消息而不是共享状态来实现并发。
煤气站只是一个获取天然气的地方。人们如何决定确保一次只有一个人使用它是另一回事。在共享状态语言中,您可能有一个气门站实例,当您要使用它时,它会被锁定。在消息传递语言中,您可以向加油站流程发送消息“有人在使用您吗?”加油站将回答是或否。无论哪种方式,你都可以实现相同的基本目标。
你可能想知道,“这听起来像对我的锁定!”重要的区别是,在Erlang中只有一个进程负责每个状态,但是任意数量的线程都可以通过可变锁定数据影响状态。如果气体支架状态因锁定语义而被破坏,则您不知道哪个线程破坏了它。在Erlang中,您可以看到进入该流程的每条消息,并查看哪些消息对其造成了损害。这可能听起来像是无用的区别,但相信我,它使并发性更容易处理。
答案 1 :(得分:1)
最简单的答案是,这只是一个类比。那个特别的段落真的是关于为什么并发很重要,以及为什么它不像人们最初想的那样不直观,来自一个程序编程世界(参见?我说'世界',但我的意思是'背景'或'背景' “混淆隐喻很容易。”
无论如何,我不会过多地读到这个陈述,我认为这并不意味着(也没有明确说明)世界本身是无锁的,只是世界是并发。这就是类比开始转向的地方;就像你和我不共享国家(提到),我们也不是一成不变的。您可以更改您的意见,更换衬衫等,而无需分叉并使用新衬衫创建新实体。正如文章中其他地方所提到的,Erlang通过使一切都不可变来解决维护并发状态所固有的一些问题。我们礼貌地等待加油站前面的人来解决问题。
答案 2 :(得分:0)
它们是否是液体?答案是“是的,它们是流体。或者不是,取决于。”
存在适用模型的条件,以及不适用的其他条件。未能理解这一点导致人们相信银子弹,并希望破灭。