【问题标题】:How would I simulate my distributed system?我将如何模拟我的分布式系统?
【发布时间】:2022-08-19 02:04:31
【问题描述】:
我编写了一个程序,它将以分布式方式在 10,000 个不同的物理节点上运行,其中每个节点都是它自己的计算设备,并且在我进入项目的硬件端之前尝试对其进行模拟。我已经研究了很长时间,但找不到任何东西。我无法启动 10,000 个线程,也无法启动 10,000 个进程(这将是最理想的,因为这将最接近现实生活)。关于如何完成这项工作的任何想法?
标签:
multithreading
process
distributed-computing
【解决方案1】:
创建许多系统线程/进程非常昂贵,因为它不仅会减慢创建/销毁的速度,而且还会给调度程序带来很大的压力,而调度程序并不意味着对这么多任务进行操作(即使调度程序可能还不错)如果只有一小部分任务处于活动状态)。更不用说存在系统限制(如果您在目标机器上拥有管理员权限,则可以进行调整)。
一种有效的解决方案是使用像纤维一样的绿色线. Fibers 基本上是一个用户级线程,有自己的堆栈和寄存器。完成了光纤的调度合作(与系统线程的抢占相反)。这意味着等待的纤程必须调用一个 yield 函数,导致上下文切换到同一线程上的另一个纤程。为了最大限度地提高性能,最好在每个线程中使用多个线程和多个光纤(以便应用程序在多个内核上运行)。除了堆栈所需的内存量外,可以创建的光纤数量没有限制。这默认堆栈大小如果默认情况下只有少数 Mo,这意味着 10K 线程或进程将需要数十 GiB 的堆栈,这是不合理的。堆栈的大小可以调整,以便只占用几十 KiB。然而,这意味着执行的操作不应该大量使用堆栈(即没有深度递归,也没有堆栈分配的数组)。
或者,您可能对与此主题相关的Distem 或SimGrid 等学术项目感兴趣。