Clojure API将这两个函数描述为:
(发送af&args) - 向代理商发送行动.立即返回代理.随后,在来自线程池的线程中,代理的状态将设置为以下值:(应用action-fn state-of-agent args)
和
(发送af&args) - 向代理发送可能阻止的操作.立即返回代理.随后,在单独的线程中,代理的状态将设置为以下值:(应用action-fn state-of-agent args)
唯一明显的区别是当动作可能阻止时应该使用send-off.有人可以更详细地解释这种功能差异吗?
Art*_*ldt 27
发送给任何代理使用的所有操作send都在一个线程池中运行,该线程池的线程数比物理数量的处理器多.这导致他们更接近cpu的全部容量.如果使用你进行1000次呼叫,send实际上不会产生很多切换开销,那么无法立即处理的呼叫只会等待处理器可用.如果他们阻止那么线程池可以运行干.
使用时send-off,会为每个调用创建一个新线程.如果send-off1000个函数,那些无法立即处理的函数仍然等待下一个可用的处理器,但如果发送线程池恰好在低电平时,它们可能会产生启动线程的额外开销.如果线程阻塞因为每个任务(可能)获得专用线程,那就没关系.