【发布时间】:2019-05-01 11:58:30
【问题描述】:
我想模拟人口,为此我想为每个人分配一个线程。 (这个数字应该达到十亿) 每个线程都将表现为个体,其末端将宣布人类死亡。 我已经使用简单的线程创建和线程池实现了这一点。但是在某个时间点之后,这两种方法都不再发生线程分配。 (比如说在 150000 个线程之后)。 我知道 java 线程以 1:1 的比例被操作系统线程绑定,这会带来问题。 还有什么其他方法可以最好地模拟这个问题?
【问题讨论】:
-
这太不合理了。一个不做任何事情的线程大约消耗 1MB 的 RAM。仅仅拥有 1000 个线程就需要 1GB 的内存。 10 亿意味着 100 万 GB 或内存。即使假设您要建模的每个人只占用 16 个字节(这比整数所需的要少),您也需要 16GB 的 RAM。除非您可以购买一些超级计算机并聘请该领域的高素质专家,否则您无法做自己想做的事情。
-
人类在您的模拟中做了什么?也许您可以拥有多个工作线程,而不仅仅是一个人。
-
如果一个人没有直播活动,分配一个线程来代表一个人不是一个好主意,即使他们有直播活动,在创建一定数量的线程后,一个人会几分钟进行下一次呼吸。所以你应该想出一个不同的模型。
-
@Meini Humans 只是找到一个伴侣并产生另一个人(即另一个线程)并消亡
-
线程看起来确实是个坏主意。我以为我可以和他们一起玩@JBNizet
标签: java multithreading threadpool simulation java-threads