为什么Elixir需要`Flow`?这不是由BEAM默认处理的吗?

Pau*_*iro 3 erlang elixir

在看到JoséValim关于Flow & GenStage我的最后一次主题演讲之后我感到困惑,因为:
1)如果将流和GenStage添加到Elixir中是因为改善并发真的很有意义;
2)另一方面,我认为Erlang/BEAM的关键优势之一是默认情况下并发/使用所有内核,开发人员不应该担心这一点.
那么,如果Flow & GenStage还没有(还)帮助运行在不同机器上的分布式系统,有人可以解释Flow和本机Erlang/BEAM并发之间的差异吗?

Fre*_*Dog 7

FlowGenStage解决一个不同于并发的问题.

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

https://youtu.be/8NPzLBSBzPI

的关键概念FlowGenStage为背压系统,以防止传入的请求工人的溢出.这种背压概念允许您添加更多工人或减慢装配线.

这些模块试图概括每个足够大的BEAM应用程序遇到的自调度问题.这些想法已经有很多一次性的实现,以允许BEAM应用程序在面临大负载时优雅地失败.

  • 将"Flow"和"GenStage"视为技术的一部分,它们直接和具体地利用了Erlang/BEAM的更通用的方法,如果使用得不好,将导致糟糕的结果.它们是为一类应用程序和场景量身定制的工具. (2认同)