在clojure中有1000万个线程

时间:2014-05-02 19:59:25

标签: clojure

我正在进行基于代理的模拟。 1000万代理商。

代理商一次几天/几周都不会做任何事情,当他们必须做某事时,它不是cpu密集型的(应该采用<1ms)。

产生1000万个线程是否合理?我已经阅读了Thread/sleepfuture,这看起来很有希望。

非常感谢任何有关此类项目的建议或建议阅读。

2 个答案:

答案 0 :(得分:6)

如果您使用内置agents的Clojure,它们会在线程池中运行,并且只会消耗少量内存。可以根据您的需要以各种方式将事件发送给这些代理。在Clojure程序中拥有10M代理是可以的。使用其中一个异步编程库(例如core.async)并使用10M go块代替代理也可能是值得的。

答案 1 :(得分:1)

这些代理商的行为有明显不同吗?或者他们的行为可以从几个模型派生出来并进一步配置数据?如果对这两个问题的回答为“否”,则可能需要考虑使用异步队列作为设计的主要构建块。

你绝对应该认真对待Charles Duffy的建议,并找到更多关于Thread/sleep如何做以及线程如何运作的更多信息。但我认为设计问题并不像relating building blocks of a program with real world objects to a fault那样具有技术性。

如果您可以提供有关您尝试完成的内容的更多细节,我或许可以编辑此答案并提供更具体的答案。