在Clojure中管理代理线程池

在Clojure中管理代理线程池,clojure,Clojure,有没有一种方法可以控制线程池来处理发送给代理的函数?据我所知,如果我送行,在引擎盖下我使用的是一个无限的线程池。比如说,我想在一个线程池上运行一些函数,在另一个线程池上运行其他函数。这是因为我有一些做IO的函数,它们也不那么重要。我会把它们放在一些有边界的线程池上,不必担心是否有过多的阻塞,它们会堆积起来,因为它们不那么重要。最重要的是,我不希望他们糟糕的IO阻塞对其他线程池上运行的一些更重要的函数产生影响 我的问题是基于类似于我在Akka使用线程池时所做的事情,我只是想知道我可以用Clojur

有没有一种方法可以控制线程池来处理发送给代理的函数?据我所知,如果我送行,在引擎盖下我使用的是一个无限的线程池。比如说,我想在一个线程池上运行一些函数,在另一个线程池上运行其他函数。这是因为我有一些做IO的函数,它们也不那么重要。我会把它们放在一些有边界的线程池上,不必担心是否有过多的阻塞,它们会堆积起来,因为它们不那么重要。最重要的是,我不希望他们糟糕的IO阻塞对其他线程池上运行的一些更重要的函数产生影响

我的问题是基于类似于我在Akka使用线程池时所做的事情,我只是想知道我可以用Clojure完成同样的事情

Amit Rathore(来自Runa inc.)发布了一个用于管理线程池的库(称为medusa)。它看起来和你要找的东西非常匹配


对于Clojure 1.4之前的版本:

无法替换内置代理发送和发送线程池。它们是硬编码的

发送池(用于计算)为固定大小=2+Runtime.getRuntime().availableProcessors()

发送池(也用于未来)是一个缓存的线程池,将不受限制地增长。这允许任意数量的后台任务等待I/O。如果缓存的线程空闲一分钟,它们将被重用和丢弃

如果您想在自己的线程池上管理工作,则需要深入java.util.concurrent或使用Clojure包装库

对于Clojure 1.5(即将推出):


您可以使用(通过executor a f发送)提供自己的executor服务,默认线程池不再是硬连接的。有关详细信息,请参阅。

Clojure库正是为此而设计的。它允许您定义线程池,并将其用于(和重用)期货、PMAP等。

它是与代理集成的还是单独的?换句话说,您可以使用它来替换内置线程池吗?或者有没有办法用不同的线程池创建代理?我看不出有什么可以解释这个。。。当我担心这个问题时,我问了这个问题--我认为没有任何答案能够无缝地替代系统功能。medusa是运行异步任务的替代库,它是内置代理的替代方案。我建议使用异步IO来解决此类问题,而不是为IO操作管理线程池如果我错了,请纠正我的错误,但我认为Claypool不能让您控制代理线程池,只能控制用于其自定义
未来
的线程池,
pmap
等实现。有没有办法为1.5+中的未来定义相同的自定义线程池?@DidierA。根据答案中的信息(在阅读时),看起来
future
使用的执行器与
send off
使用的执行器相同,因此我认为我们可以通过
set agent send off Executor>设置
future
使用的执行器