Clojure代理的发送功能正在阻塞

时间:2014-12-22 13:17:28

标签: clojure

(def queue-agent (agent (clojure.lang.PersistentQueue/EMPTY)))
(send queue-agent conj "some data for the queue")
(println "test output")

如果我运行此代码,在几(!)秒之后,控制台将输出test output,然后没有任何反应(程序没有终止)。我刚刚检查了几个来源,他们都说send函数是异步的,应该立即返回调用线程。那有什么不对呢?为什么不回来?我有什么问题吗?还是我的环境?

1 个答案:

答案 0 :(得分:3)

所以你有两个问题:启动时间长,程序不会退出。

启动:Clojure不做任何树摇动。运行Clojure程序时,每次运行时都会加载并引导编译器并初始化名称空间。几秒钟听起来适合裸露的Clojure程序。

挂起:如果您使用代理线程池,则必须运行shutdown-agents,如果您希望程序退出。 vm根本不知道关闭它们是安全的。