【问题标题】:Is Elixir's System.cmd blockingElixir 的 System.cmd 是否阻塞
【发布时间】:2015-06-16 13:51:01
【问题描述】:

我想制作一个自动拉取 github 存储库的系统

System.cmd("git",["pull", link])

此命令是否阻塞?如果我在许多演员中同时启动它,我是否总是能够获得与演员一样多的拉动(或至少系统的套接字限制)?

如果没有,还有办法实现吗?

【问题讨论】:

    标签: concurrency elixir


    【解决方案1】:

    Erlang 和 Elixir IO 是非阻塞的,因此一个进程的 IO 通常不会以任何方式影响其他进程。 Joe Armstrong describes this in a blog post:

    所以我们的代码“看起来”是在进行同步阻塞读取。 看起来像是在引号中,因为它实际上不是阻塞读取, 这确实是一个异步读取,不会阻塞任何其他 Erlang 进程。

    【讨论】:

    • 是的。但是有些函数使用与单例参与者的通信。像 make_ref/0 函数。它们会在短时间内阻塞整个系统。
    • 有趣。这在实践中是否存在问题?你遇到过这方面的问题吗?我很好奇;-)
    • 并非如此。但我听说很多人不得不追踪这些问题并对其进行优化。我的意思是这听起来很合理。系统没有阻塞,但演员是。因此,如果许多演员都依赖于单个演员的回应,他们都必须等待他完成当前的工作。这就是我提出问题的原因,因为我觉得这可能会询问一个持有一些 TTY 实例的进程。
    • 是的,拥有一个 TTY 池以同时运行定义数量的实例似乎是个好主意。
    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 2020-09-16
    • 2011-04-09
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多