为什么混合不使用太多的OTP?

时间:2016-06-20 14:37:26

标签: elixir otp mix

我试图通过查看使用OTP的项目的好例子来学习OTP。我研究了mix的代码。但看起来混合并没有使用太多的OTP。

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

我想知道为什么mix没有使用OTP?或者是CLI应用程序的OTP过度杀手?它只对长期运行的应用程序有意义吗?

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

OTP用于即使在出现故障的情况下也可以保持您的应用程序正常运行,而混合情况则不然。在报告错误之前,您不希望混合挂起并重试n次。

如果你想看到OTP的好用,ranch很棒。