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

时间:2010-04-25 09:47:33

标签: multithreading events erlang

我最近正在阅读一篇论文Why Events are Bad。本文是基于事件和基于线程的高度并发服务器的比较研究,最后得出的结论是,线程比该场景中的事件更好。

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

/阿伦

2 个答案:

答案 0 :(得分:14)

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

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

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

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

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

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

正如您所见,演员只是模特的一部分。错误处理是基本的,但往往被忽视。俯视它意味着你错过了部分内容。

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

答案 1 :(得分:12)

我猜它叫做Actor model