0

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

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

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

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

4

1 回答 1

3

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

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

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

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

OTP 是为了让您的应用程序即使在失败的情况下也能正常运行,而混合情况并非如此。在报告错误之前,您不希望 mix 挂起并重试 n 次。

如果你想看到 OTP 的良好用法,牧场很棒。

于 2016-06-21T11:18:34.713 回答