我最近阅读了一篇论文《事件为何不好》,该论文对基于事件和线程的高并发服务器进行了比较研究,并最终得出结论:在这种情况下,线程比事件更好。我发现我无法将erlang暴露的并发模型归类。Erlang提供轻量级进程,但这些进程大部分时间都被挂起,直到收到某个事件/消息为止。/Arun
Erlang并发模型的基础原则如下:
轻量级并发。您应该能够在应用程序中高效创建所需的所有进程,并且可以在必要时高效地创建和删除它们。这意味着进程是轻量级和小巧的,不需要使用进程池来节省时间。
异步通信。所有进程之间的通信都是通过异步消息传递完成的,仅此而已,没有其他方法。
错误处理。与轻量级并发和异步消息一样,错误处理也是构建强大系统的基础。处理这些问题的基本操作与并发操作交互,并构成了Erlang并发模型的一部分。
进程隔离。进程之间根本没有共享状态,唯一的通信方式是通过消息传递。这对于构建强大系统至关重要,因为它允许进程崩溃而不会破坏其他进程的状态。当然,它们可能会通过错误处理机制接收到进程崩溃的信息,但崩溃不会在其他进程中创建不一致的状态。其应对措施是:没有全局数据。
这些是Erlang并发模型的基本原则。您可能会看到它们以不同方式表达,但它们基本上是相同的。Erlang还拥有不可变数据,这是一个重大优点,但这实际上不是并发模型的一部分,消息传递和进程隔离就足够了。在某些圈子中,这可能被认为是异端邪说。
正如您所看到的,actors只是该模型的一部分。错误处理是基础,但通常被忽视。忽略它意味着您已经错过了其中的一部分。
注:Erlang进程是真正的进程/线程,它们有自己的生命周期,并不仅仅是事件驱动协程的形式。进程可以愉快地进行业务,改变其内部状态,而不仅仅是受外部事件驱动。
我猜它被称为Actor模型。