gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:18:17 24 4
gpt4 key购买 nike

在看到 José Valim 上次关于 Flow 和 GenStage 的主题演讲后,我感到很困惑,因为:
1) 如果 Flow 和 GenStage 被添加到 Elixir 中,是因为它对于提高并发性确实有意义;
2) 另一方面,我认为 Erlang/BEAM 的一个关键优势是它默认是并发/使用所有内核的,开发人员不应该担心这一点。
因此,如果 Flow 和 GenStage 还不能帮助在不同机器上运行分布式系统,有人可以解释一下 Flow 和原生 Erlang/BEAM 并发之间的区别吗?

最佳答案

FlowGenStage 解决的不仅仅是并发问题。

分布式系统中经常发生的情况是,一旦您轻松实现并发,您最终会遇到“惊群”问题,其中单个进程或一小组进程成为系统中所有其他进程的瓶颈。这个视频很清楚地说明了这个问题。

https://youtu.be/8NPzLBSBzPI

FlowGenStage 的关键概念是系统中的背压,以防止传入请求溢出到工作线程。这种背压概念允许您添加更多 worker 或放慢装配线速度。

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

关于erlang - 为什么 Elixir 需要 `Flow` ?这不是默认由 BEAM 处理的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com