Erlang 为什么长生不老药需要“流动”?Isn';默认情况下,BEAM处理的是什么?

Erlang 为什么长生不老药需要“流动”?Isn';默认情况下,BEAM处理的是什么?,erlang,elixir,Erlang,Elixir,在看到JoséValim最后一次关于Flow&GenStage的主题演讲后,我感到困惑,因为: 1) 如果将Flow&GenStage添加到Elixir中,是因为改进并发性确实有意义 2) 另一方面,我认为Erlang/BEAM的一个关键优势是默认情况下它是并发的/使用所有内核的,开发人员不必担心这一点。 因此,如果Flow&GenStage还不能帮助在不同机器上运行的分布式系统,有人能解释一下Flow和本机Erlang/BEAM并发之间的区别吗?Flow和GenStage解决的问题与并发不同

在看到JoséValim最后一次关于
Flow&GenStage
的主题演讲后,我感到困惑,因为:
1) 如果将Flow&GenStage添加到Elixir中,是因为改进并发性确实有意义
2) 另一方面,我认为Erlang/BEAM的一个关键优势是默认情况下它是并发的/使用所有内核的,开发人员不必担心这一点。

因此,如果
Flow&GenStage
还不能帮助在不同机器上运行的分布式系统,有人能解释一下
Flow
和本机Erlang/BEAM并发之间的区别吗?

Flow
GenStage
解决的问题与并发不同

在分布式系统中经常发生的事情是,一旦您有了简单的并发性,您最终会遇到“雷鸣般的群体”问题,即单个进程或一小群进程成为系统中所有其他进程的瓶颈。这段视频清楚地说明了这个问题

Flow
GenStage
的关键概念是系统中的背压,以防止传入请求溢出到工作人员。这种背压的概念可以让你增加更多的工人或放慢装配线的速度


这些模块试图概括每个足够大的梁应用程序遇到的自调度问题。已经有许多一次性实现了其中的思想,允许BEAM应用程序在面对大负载时正常地失败

在Erlang中,您可以向给定的“进程/pid”发送任意数量的消息,但如果发送太多消息,它们就会被VM排队,并阻塞内存。管理这些队列是一门“黑色艺术”——流程中的一步——它确保接收进程/pid不会过载。我同意。但这是在分布式系统中,JoséValim介绍了一种情况,即您正在讨论的是一台机器中的单个系统。我也理解背压的优点。现在缺少的是Erlang/BEAM如何处理它,这使得即使它作为Erlang的关键独特因素出现,也有必要这样做。我错过了这一部分。BEAM是一个分布式系统,恰好在一台或100台机器上运行。可以将
Flow
GenStage
看作是直接和具体利用更通用的Erlang/BEAM方法的技术,如果使用不当,将导致糟糕的结果。它们是为一类应用程序和场景定制的工具。