为啥混合不使用太多 OTP?

Posted

技术标签:

【中文标题】为啥混合不使用太多 OTP?【英文标题】:Why is mix not using much of OTP?为什么混合不使用太多 OTP? 【发布时间】:2016-10-21 20:54:45 【问题描述】:

我正在尝试通过查看使用 OTP 的项目的优秀示例来学习 OTP。我研究了mix 的代码。但看起来 mix 并没有使用太多的 OTP。

对我来说,mix 有很多可能的 OTP 用例。例如,同时编译多个文件,同时下载 deps 等。

我想知道为什么 mix 不使用 OTP?还是 CLI 应用程序的 OTP 过度杀伤力?它只对长时间运行的应用程序有意义吗?

我还注意到 mix 不会同时运行。这也有原因吗?

【问题讨论】:

有趣的问题,但似乎比 *** 更适合邮件列表或论坛。 【参考方案1】:

我想你已经回答了你自己的问题。核心 OTP 概念可能不适用于短期命令。

例如,如果您有许多独立的任务(例如服务器连接)并且当其中一个任务失败时,您仍然需要保持应用程序运行,那么主管就很棒。对于混合任务,如果任务失败了,重试没有多大意义,只需打印错误消息并退出即可。

GenServer 也非常适合在长时间运行的应用程序中保持状态,但在 CLI 应用程序中,所有状态都是临时读取然后使用的,因此最好将其传递给函数调用。

但是,mix 不能同时运行这些东西是不正确的。尝试运行htop,然后编译您的项目,它将利用您的所有内核。 mix compile 使用并行编译器来加快速度,效果很好。编译状态保存在 ETS 表而不是 GenServers 中,因此所有进程都可以同时访问它。

OTP 是为了让您的应用即使在发生故障时也能正常运行,而混合则并非如此。你不希望 mix 在报错之前挂起并重试 n 次。

如果您想看到 OTP 的良好用法,ranch 很棒。

【讨论】:

以上是关于为啥混合不使用太多 OTP?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Erlang 中使用 OTP?

为啥 SQL Server 不允许我启用混合身份验证模式,以便我可以使用 sa 用户将角色分配给其他用户?

Laravel 叶片和顺风没有正确混合,我不明白为啥

使用纯 erlang OTP 代替带有 React.js 和 phoenix 框架的 elixir 后端

如果我的 UIView 设置为不透明,为啥它仍然被模拟器着色为“混合”?

Erlang 和 OTP in Action:为啥不能在 telnet 中调用 get_count?