每当我有一个非依赖异步函数时,是否应该在Erlang中使用spawn?

时间:2013-04-02 20:13:03

标签: erlang

如果我有一个可以异步执行的函数而没有任何依赖,并且没有其他函数直接需要它的结果,我应该使用spawn吗?在我的场景中,我想继续使用消息队列,因此产生会重置我的阻塞循环,但是如果还有其他情况我可以尽可能地分配函数调用,那会不会对我的应用程序产生负面影响?

总的来说,使用Spawn的优缺点是什么。

3 个答案:

答案 0 :(得分:4)

与操作系统进程或线程不同,Erlang进程非常轻量级。启动,停止和安排新进程的开销很小。您应该能够根据需要生成尽可能多的内容(每个vm的最大值为数十万)。 Actor模型Erlang实现允许您并行思考实际发生的事情并编写程序来直接表达。如果可以避免,请避免使用工作队列使逻辑复杂化。

只要有逻辑意义就生成一个流程,并且只在必要时才进行优化。

答案 1 :(得分:3)

首先要记住的是参数的大小。它们将从当前进程复制到新进程,如果参数很大,则可能效率低下。

可能出现的另一个问题是,如果进程数量太大而导致虚拟机膨胀,系统将无法响应。您可以通过使用工作流程池或特殊监视器进程来解决此问题,这将只允许有限数量的此类进程。

答案 2 :(得分:3)

所以产卵会重新阻止我的阻塞循环

如果您遇到循环将收到许多需要独立操作的消息的情况,请不要犹豫并为每个消息处理生成新进程,这样您就可以利用计算机的多核功能(如果有的话) 。正如kjw0188所说,Erlang进程的权重非常轻,如果系统并行地处理进程数的限制(假设您正在执行合理的代码),则应用程序更有可能使节点的能力过载。