Erlang:什么时候产生一个新进程是合乎逻辑的?什么时候不?

时间:2012-01-13 19:28:32

标签: erlang parallel-processing spawn

如果我们真的有一个重型流程系统,其中流程产生是为了某种负载分配 - 这是很清楚的。

如果我们谈论的是web-server:为每个连接生成一个新的进程是个好主意,因为这样可以分发。但还有什么?模型,视图和控制器的单个过程?听起来很奇怪,因为它们都是以“班轮”的方式运行,因此不能很好地平行,我们只能在交换时获得开销。而且,那些“模型,视图和控制器”是如此轻巧,所以它们可以保持在一个单一的过程中,不是吗?

因此,除了“新连接”情况之外,产生新进程的好处在哪里。

谢谢你的建议。

2 个答案:

答案 0 :(得分:2)

通常,您可以在任何地方管理共享资源。它可能是套接字或数据库连接,但也可能是某些共享的内存数据或某种状态机。

您可能还想对值列表进行并行处理(请参阅pmap)。

对于您的“交换”点,您应该知道Erlang进程不会使用op-sys工具进行调度,并且调度几乎是免费的。

在Web应用程序服务器的特定情况下,我理解您的问题。如果您正在编写具有非常少的共享状态的传统Web应用程序。您的Web框架可能已经处理了缓存和会话状态等(这些工具将生成进程)。

我们都被高度灌输到这种无状态的Web应用程序模型中。我们都被告知,因为我们是幼崽,有状态的系统很难发展,而且它们不能扩展。我想你会发现那些有挑战性的东西。随着对WebSockets的浏览器支持的改进,以及像Erlang和Clojure这样的服务器端语言提供可安全状态管理的可扩展平台,将会有那些能够制作更多交互式Web应用程序的人。作为一个极端的例子,您能将WoW成像为Web应用程序吗?

答案 1 :(得分:1)

为每个连接生成一个新进程的一个原因是它使连接编程变得更加简单。由于进程只处理一个连接,例如阻止访问数据库,因此长轮询或流式传输变得更加容易。此进程阻止不会影响任何其他连接。

在Erlang中,一般的“规则”是您使用进程来建模并发活动并管理共享资源。流程是构建系统的基本方法。

相关问题