我正在尝试通过查看使用 OTP 的项目的良好示例来学习 OTP。我研究了mix的代码。但看起来 mix 并没有使用太多的 OTP。
对我来说,mix
OTP 有很多可能的用例。例如,同时编译多个文件,同时下载 deps 等。
我想知道为什么 mix 不使用 OTP?还是 CLI 应用程序的 OTP 过度杀伤力?它只对长时间运行的应用程序有意义吗?
我还注意到 mix 不会同时运行。这也有原因吗?
我正在尝试通过查看使用 OTP 的项目的良好示例来学习 OTP。我研究了mix的代码。但看起来 mix 并没有使用太多的 OTP。
对我来说,mix
OTP 有很多可能的用例。例如,同时编译多个文件,同时下载 deps 等。
我想知道为什么 mix 不使用 OTP?还是 CLI 应用程序的 OTP 过度杀伤力?它只对长时间运行的应用程序有意义吗?
我还注意到 mix 不会同时运行。这也有原因吗?
我想你已经回答了你自己的问题。核心 OTP 概念可能不适合短期命令。
例如,如果您有许多独立的任务(例如服务器连接)并且当其中一个任务失败时,您仍然需要保持应用程序运行,那么主管就很棒。对于混合任务,如果任务失败,重试没有多大意义,只需打印错误消息并退出即可。
GenServers 也非常适合在长时间运行的应用程序中保持状态,但在 CLI 应用程序中,所有状态都是临时读取然后使用的,因此最好将其传递给函数调用。
但是,mix 不能同时运行这些东西是不正确的。尝试运行htop
然后编译您的项目,它将利用您的所有内核。mix compile
使用并行编译器来加快速度,效果很好。编译状态保存在 ETS 表中而不是 GenServers 中,因此所有进程都可以同时访问它。
OTP 是为了让您的应用程序即使在失败的情况下也能正常运行,而混合情况并非如此。在报告错误之前,您不希望 mix 挂起并重试 n 次。
如果你想看到 OTP 的良好用法,牧场很棒。