我正在进行基于代理的模拟。 1000万代理商。
代理商一次几天/几周都不会做任何事情,当他们必须做某事时,它不是cpu密集型的(应该采用<1ms)。
产生1000万个线程是否合理?我已经阅读了Thread/sleep
和future
,这看起来很有希望。
非常感谢任何有关此类项目的建议或建议阅读。
答案 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那样具有技术性。
如果您可以提供有关您尝试完成的内容的更多细节,我或许可以编辑此答案并提供更具体的答案。