Clojure中的演员

Clojure中的演员,clojure,actor,Clojure,Actor,我正在用Scala编写一个实用程序,其中包括一个“文件副本”参与者。我发送要复制的文件名,演员一次复制一个文件名 在Clojure中如何使用代理执行相同的操作?为什么需要使用代理执行此操作?因为要异步复制它们?但如果您仍然想这样做,可以使用以下方法: (do-all (for [x file-names] (send-off agent-name copy-function x))) 虽然,也许使用期货更好?我认为代理的要点是,它们保持一些状态,可以通过传递函数来改变。我猜如果您不关心前一个值

我正在用Scala编写一个实用程序,其中包括一个“文件副本”参与者。我发送要复制的文件名,演员一次复制一个文件名


在Clojure中如何使用代理执行相同的操作?

为什么需要使用代理执行此操作?因为要异步复制它们?但如果您仍然想这样做,可以使用以下方法:

(do-all (for [x file-names] (send-off agent-name copy-function x)))

虽然,也许使用期货更好?

我认为代理的要点是,它们保持一些状态,可以通过传递函数来改变。我猜如果您不关心前一个值,而只是想使用代理执行一些异步工作,那么可以传递忽略前一个值的复制函数。是的,当然-您可以将一些状态数据存储到代理中。如果您不打算在代理中存储状态,那么最好使用future异步执行工作。对要复制的每个文件使用
future
将使复制不同步,从而易于对每个文件(或您可能希望等待的特定文件)进行阻止,并允许同时进行所有多个拷贝(这可能是您想要的,也可能不是您想要的)。多次发送到单个代理会将复制操作排队,以便在任何时候都只发生一次。使用
future
假定文件副本之间没有交互,或者所有此类交互都是线程安全的(如果复制依赖于Java互操作,则可能不是)。使用参与者/代理不会做出这样的假设,因为复制是按顺序进行的,只是与发送者不在同一线程中。您可能对此感兴趣。它几乎准备好开始测试版了,只需要再测试几次。