究竟什么是Erlang的并发模型?

aru*_*esh 3 erlang events multithreading

我最近正在读一篇论文为什么事件不好.本文是基于事件和基于线程的高度并发服务器的比较研究,最后得出的结论是,线程比该场景中的事件更好.

我发现我无法对erlang暴露的并发模型进行分类.Erlang提供轻量级进程,但这些进程大部分时间都被挂起,直到它收到某种类型的事件/消息.

/阿伦

rvi*_*ing 14

Erlang并发模型基于以下前提:

  • 轻量级并发.您应该能够有效地为应用程序创建任意数量的进程,并且您应该能够在必要时有效地创建和删除它们.这意味着流程轻而小,无需使用流程池来节省时间.

  • 异步通信.所有进程通信都是通过异步消息传递,就是这样,没有别的,nada.

  • 错误处理.与轻量级并发和异步消息相同的方式是构建并发系统错误处理的基础,这对于构建健壮的系统至关重要.这个原语与并发交互,是Erlang并发模型的一部分.

  • 过程隔离.进程之间根本没有共享状态,唯一的通信方式是通过消息传递.这对于能够构建健壮的系统至关重要,因为它允许进程崩溃而不会破坏其他进程.当然,他们可能会收到进程因错误处理机制而崩溃的信息,但崩溃将永远不会在其他进程中创建不一致的状态.这样做的必然结果是没有全球数据.

这些是Erlang并发模型的基本前提.您可能经常看到它们以不同的方式表达,但它们基本相同.Erlang也有不可变的数据,这是一个很大的WIN,但这并不是并发模型的一部分,消息传递和进程隔离就足够了.在某些圈子中,这可能被认为是异端观点.

正如您所看到的,Actors只是模型的一部分.错误处理是基本的,但往往被忽视.俯瞰它意味着你错过了一点.

NB Erlang进程是正确的进程/线程,因为它们拥有自己的生命,而不仅仅是一种事件驱动的协同程序.流程可以愉快地开展业务并改变其内部状态,而不受外部事件的驱动.


Yas*_*aev 12

我猜它叫做Actor模型.