【发布时间】:2013-10-06 02:25:05
【问题描述】:
我正在模拟具有大量节点的网状网络。节点在整个网络的不同主节点之间传递数据。
每个主节点每秒上线一次接收信息,但是从节点不知道主节点何时启动,因此当它们有信息要发送时,它们会尝试每5毫秒发送一次,持续1秒以确保他们能找到主人。
在具有 1600 个节点的普通计算机上运行此程序会导致 1600 个线程,并且性能极差。
什么是处理线程的好方法,以便每个节点都像在自己的线程上运行一样?
如果这很重要,我会在 python 2.7 中构建模拟,但如果有意义的话,我愿意更改为其他东西。
【问题讨论】:
-
您应该考虑实现某种(线程)队列或至少一个调度程序来管理信息流。但是,如果不知道您想要完成什么,就很难说清楚。
-
运行 1600 个线程当然会导致普通计算机性能不佳。您可能需要考虑高性能计算机,或者您可以尝试利用 GPU 来获得更多计算能力。 GPU 非常适合多线程。
-
@justhalf 当然会很糟糕。每个线程每秒只活动几毫秒,其余时间都在休眠,所以我认为问题不在于 CPU 资源,而在于核心数量或仅仅是存在那么多线程和上下文切换它们要求。我什至应该说 10,000 而不是 1600。我正在寻找一个很好的解决方案来近似这些节点并行运行以最大化我可以运行的节点数量。我认为迁移到 GPU 并没有真正的帮助。
-
“逼近这些节点”是什么意思?
-
近似它们的全部并行特征。在常规 CPU 上运行让我无法只为每个节点提供自己的线程并假设它们将齐头并进。例如,我可以有一个(或几个)控制线程,当其中一个节点有信息要发送时,它会启动较小的线程,但大多数时候每个节点都没有一个线程。
标签: python multithreading performance simulation