35 | 并发中的编译技术(三):Erlang语言厉害在哪里?
该思维导图由 AI 生成,仅供参考
什么是 Actor 模型?
- 深入了解
- 翻译
- 解释
- 总结
Erlang语言以其独特的Actor模型在并发编程领域展现出强大的能力。Actor模型通过消息传递实现并发,避免了共享内存的竞争和锁机制的复杂性。文章介绍了Actor模型的工作原理,以及在实际场景中的应用。通过与面向对象编程的关联,读者可以更好地理解Actor模型的特点和优势。同时,文章也指出了采用Actor模型可能面临的数据复制和内存占用增加、异步编程模式等挑战。总的来说,Actor模型在并发编程中具有独特的优势,尤其适用于分布式云端应用的开发。 支持Actor模型的最有名的语言是Erlang。Erlang是爱立信公司发明的,它的正式版本是在1987年发布,其核心设计者是乔 · 阿姆斯特朗(Joe Armstrong),最早是用于开发电信领域的软件系统。在Erlang中,每个Actor叫作一个进程(Process)。Erlang有两个显著的优点:首先,对并发的支持非常好,所以它也被叫做面向并发的编程语言(COP)。第二,用Erlang可以编写高可靠性的软件,可以达到9个9。这两个优点都与Actor模式有关。由Actor构成的系统像一个生命体,每个Actor像一个细胞。细胞可以有新陈代谢,而生命体却一直存在。可以说,用Erlang编写的基于Actor模式的软件,非常好地体现了复杂系统的精髓。 除了Erlang以外,Scala语言也提供了对Actor的支持,它是通过Akka库实现的,运行在JVM上。微软的一个Orleans项目在.NET平台上支持Actor模式,并进一步做了一些有趣的创新。 在上一讲研究过协程的实现机制以后,我们现在再分析Actor的实现机制时,其实就应该会把握要点了。Erlang的运行机制,是基于一个寄存器机解释执行。这使得调度器可以在合适的时机,去停下某个Actor的运行,调度其他Actor过来运行。Erlang做抢占式调度的机制是对Reduction做计数,Reduction可以看作是占时不长的一小块工作量。如果某个Actor运行了比较多的Reduction,那就可以对它做调度,从而提供了软实时的能力。 Erlang的最底层,所有的I/O都是用事件驱动的方式来实现的。系统收到了一块数据,就调用应用来处理,整个过程都是非阻塞的。 基于Erlang,我们学习了Actor的运行时机制的两个重要特征:一是并发调度机制,二是内存管理机制。
《编译原理实战课》,新⼈⾸单¥59
全部留言(5)
- 最新
- 精选
- 顾仲贤小骄傲一下,本人在WhatsApp工作,目前所有的Infra还是用Erlang搭建的微服务,很稳定。当初被Facebook收购时,只有不到30个engineer(Infra就更少了)来maintain1.4B的月活,这就是Erlang的厉害之处吧。
作者回复: 有些有个性的公司,会故意使用比较小众的语言,来过滤出比较牛的工程师。我还知道有个公司用ocaml做开发,这样招聘到的就是真正喜欢函数式编程的工程师。 Erlang是如此。Erlang如果理解了它的精髓,翻过学习墙以后,会让工程师更省事。比如,函数式编程,消除了很多由于状态管理不善导致的问题等。算总账下来,使用Erlang这种语言更划算。 就像学技术,把编译原理、算法这些看似难的知识学会,其实总体来说更“划算”!
2020-09-0414 - gkkrjj这些技术之前都没接触过 是不是技术栈太浅了?
作者回复: Erlang确实比较小众,不能怪你。 不过,很多技术没有被大众广泛使用,不代表它没有价值。我们现在复兴的一些技术,比如函数式编程,其实都有很久的历史了,只不过突然又遇到了让它能够体现出优势的时代需求。
2020-11-132 - myrfy在仪器仪表领域很流行的labview虚拟仪器开发环境中,labview的运行时感觉就是一个actor模型,每个图标节点之间通过连线表示的通道传递数据
作者回复: 感谢分享领域经验!学到了!
2020-09-022 - minghu6这个东西在函数式编程风格的语言里很常见2021-06-20
- walnutactor的消息队列也需要锁保护吧?2021-01-26