【发布时间】:2014-06-19 14:27:39
【问题描述】:
我正在开发一个基于代理的模拟,大约有 1 个。 1000 万代理。
代理将连续数天/数周无所事事,而当他们必须做某事时,这不是 cpu 密集型的(应该花费
尝试生成 1000 万个线程是否合理?我已经阅读了 Thread/sleep 和 future 似乎很有希望。
对于此类项目的任何建议或建议阅读将不胜感激。
【问题讨论】:
-
我不建议为您描述的场景创建 1000 万个线程。 This answer 谈到了与创建线程相关的一些开销。例如,默认情况下,每个线程都分配有 256Kb 的堆栈空间。您可以计算出这对 10,000,000 个线程意味着什么。当然,您可以减少每个线程的堆栈大小,但它仍然会占用大量内存。
-
Thread/sleep是绝对使用错误的东西-这意味着您阻塞了线程池中的一个插槽,因此没有其他进程可以使用该线程运行,所以如果你使用它(或在你的执行程序中执行任何其他阻塞操作),你正在增加你需要的真实(操作系统级)线程的数量。如果你使用core.async之类的东西,那么当一个单独的 goroutine 不需要它时,线程池中的一个槽可以被移交给不同的任务。也就是说,我们对您的问题空间的了解几乎不足以推荐合适的工具。
标签: clojure