代码之家  ›  专栏  ›  技术社区  ›  Robert Campbell

Clojure的“发送”和“发送”功能在向代理发送操作方面有什么区别?

  •  24
  • Robert Campbell  · 技术社区  · 15 年前

    Clojure API将这两个功能描述为:

    (发送F&args)-向代理发送操作。立即返回代理。随后,在来自线程池的线程中,代理的状态将设置为值:(apply action fn state of agent args)

    (发送F&args)-向代理发送可能的阻塞操作。立即返回代理。随后,在一个单独的线程中,代理的状态将被设置为以下值:(apply action fn state of agent args)

    唯一明显的区别是 送别 应在操作可能阻塞时使用。有人能更详细地解释这种功能差异吗?

    1 回复  |  直到 10 年前
        1
  •  25
  •   Arthur Ulfeldt    10 年前

    发送给任何代理的所有操作 send 在线程池中运行,线程数比处理器的物理数量多。这会使它们运行得更接近CPU的满容量。如果您使用 发送 您不会产生太多的切换开销,不能立即处理的调用只需等待处理器可用。 如果它们阻塞了线程池,那么线程池就会干涸。

    当你使用 send-off ,将为每个调用创建一个新线程。如果你 送别 1000个函数,那些不能立即处理的函数仍然等待下一个可用的处理器,但是如果 发送线程池 恰巧跑得很低。 如果螺纹堵塞就可以了 因为每个任务(可能)都有一个专用线程。