繁体   English   中英

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

[英]Erlang: When is it logical to spawn a new process? When not?

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

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

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

谢谢你的建议。

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

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

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

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

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

为每个连接生成新进程的一个原因是它使连接编程变得更加简单。 由于一个进程仅处理一个连接,因此会进行诸如阻塞对数据库的访问之类的操作,因此长时间轮询或流式传输变得更加容易。 该过程阻止不会影响任何其他连接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM