最佳答案
一段时间以来,我一直在关注函数式编程语言和特性日益增长的可见性。我调查了他们,没有发现上诉的理由。
然后,最近我参加了凯文 · 史密斯在 Codemash的“二郎基础”演讲。
我很喜欢这个演示,并了解到函数式编程的许多属性使得避免线程/并发问题变得更加容易。我理解缺乏状态和可变性使得多个线程不可能更改相同的数据,但是 Kevin 说(如果我理解正确的话)所有的通信都是通过消息进行的,并且消息是同步处理的(同样避免了并发问题)。
但是我读到 Erlang 用于高度可伸缩的应用程序(这就是爱立信最初创建它的全部原因)。如果所有事情都作为同步处理的消息来处理,那么每秒处理数千个请求的效率如何呢?这难道不是我们开始转向异步处理的原因吗? 这样我们就可以利用同时运行多个操作线程的优势,实现可伸缩性?这种体系结构虽然更安全,但在可伸缩性方面似乎是一种倒退。我错过了什么?
我理解 Erlang 的创建者故意避免支持线程以避免并发问题,但我认为多线程对于实现可伸缩性是必要的。
函数式编程语言怎么可能固有地线程安全,但仍然可伸缩?