为啥混合不使用太多 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?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 SQL Server 不允许我启用混合身份验证模式,以便我可以使用 sa 用户将角色分配给其他用户?
使用纯 erlang OTP 代替带有 React.js 和 phoenix 框架的 elixir 后端