只要我有一个非依赖异步函数,就应该在Erlang中使用spawn吗?

只要我有一个非依赖异步函数,就应该在Erlang中使用spawn吗?,erlang,Erlang,如果我有一个可以在没有任何依赖项的情况下异步执行的函数,并且没有其他函数直接需要它的结果,那么我应该使用spawn吗?在我的场景中,我希望继续使用一个消息队列,因此生成将解除我的阻塞循环,但如果在其他情况下我可以尽可能多地分发函数调用,这会对我的应用程序产生负面影响吗 总的来说,使用Spawn的优缺点是什么。首先想到的是参数的大小。它们将从当前流程复制到新流程,如果参数很大,则可能效率低下 另一个可能出现的问题是虚拟机的进程数量过多,导致系统变得不负责任。您可以通过使用工作进程池或特殊的监视进程

如果我有一个可以在没有任何依赖项的情况下异步执行的函数,并且没有其他函数直接需要它的结果,那么我应该使用spawn吗?在我的场景中,我希望继续使用一个消息队列,因此生成将解除我的阻塞循环,但如果在其他情况下我可以尽可能多地分发函数调用,这会对我的应用程序产生负面影响吗


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

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


另一个可能出现的问题是虚拟机的进程数量过多,导致系统变得不负责任。您可以通过使用工作进程池或特殊的监视进程来克服此问题,这些进程只允许有限数量的此类进程工作。

与操作系统进程或线程不同,Erlang进程重量非常轻。启动、停止和调度新流程的开销最小。您应该能够根据需要生成尽可能多的虚拟机(每个虚拟机的最大数量为几十万)。Erlang实现的Actor模型允许您考虑并行中实际发生的事情,并编写程序来直接表达这一点。如果可以避免的话,请避免使工作队列的逻辑复杂化

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

这样产生的进程将解除我的阻塞循环

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