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