生成 10,000 个线程似乎不是正确的方法,有其他想法吗?

joe*_*mow 0 multithreading distributed

我正在尝试模拟一个去中心化系统,但在给定现实生活参数的情况下进行模拟时遇到困难。

真实世界:

  • 每个模块都有自己的计算机,并且通过网络进行通信
  • 可能有数十万个模块
  • 他们将相互沟通以执行特定的操作

模拟:

  • 每个模块都被视为自己的线程,因为它们是异步工作的
  • 无法真正生成超过 1,000 个线程
  • 线程与模块的比例为1比1

每个模块生成一个线程是正确的方法吗?从理论上讲,这似乎是正确的方法,但在实践中,它会遇到大约 1,000 个线程的限制。

ras*_*cio 5

您的上下文与演员模型完全匹配
https://en.wikipedia.org/wiki/Actor_model
通过响应解释它是不可能的,从 wiki 链接开始并用您正在使用的语言搜索一些实现,但它做了什么如果你需要,你可以模拟数百万个“孤立状态”,并使用很少的资源管理它们突变的并发性(你应该能够用很少的线程达到 1K 个参与者,也许还有 2 个)。

此外,现在很多语言都提供了(以其风格)轻量级线程的版本,可用于减少使用的实际线程数量(goroutine、kotlin 协程、java Fiber 等)