目标: n 任务要在 t 期间完成(比如180秒),每项任务需要2秒才能完成。任务必须在 t 期间统一分配。
设置:我正在使用Mininet环境,它使用lightweight virtualization来运行Linux主机。在我的设置中,我有10个主机。每个任务都与主机(随机选择)相关联。
到目前为止,我已经完成了10个主机之间的任务(根据他们的关联),并在后台安排random_sleep
(少于 t )无需等待他们完成。
$ sleep random_duration && do_task &
但是,当 n 很大(> 2000)时,这会导致超出最大用户进程数。
或者,我想到为每个主机创建一个线程并在前台逐个调度任务(在前一个完成后开始下一个)。但是,在这种方法中,我不能保证 n 任务可以在 t 中完成。
解决这个问题的可扩展方法是什么?
答案 0 :(得分:0)
假设您可以某种方式跟踪正在运行的任务的数量,那么我会看到一个解决方案。访问或硬编码MAX_PROCESSES限制。将所有进程放入队列(或任何集合)。如果n < MAX_PROCESSES
(剩余一些用于正常系统工作),那么您已经知道如何处理这项工作。
n
过大的情况下,仍会计算调度间隔time_allowed * processor_count / n
,但仅安排第一个MAX_PROCESSES * ratio
任务,对于某些ratio
&lt; 1.0。在处理器中平均分配它们。当流程完成时(可能是计划完成的一半完成),然后安排另一批任务,始终保持活动任务的数量略多于processor_count
(在您的示例中为10),但比{{轻松得多1}}。
这会处理你的问题吗?