【问题标题】:Creating many threads in java在java中创建多个线程
【发布时间】: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


【解决方案1】:

你可以看看在你的情况下比线程更适应的actor模型。

特别是,akka 是开源的,并且以其实现这种模式而闻名:https://doc.akka.io/docs/akka/2.5.3/scala/guide/actors-intro.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多