线程:在T周期内完成N个任务

Threading: Complete N tasks in period T

Objective:我有 n 个任务要在 t[=36= 期间完成](比如 180 秒)每个任务需要 ~ 2 秒才能完成。任务必须在 t.

期间均匀分布

设置:我正在使用一个 Mininet 环境,它使用 lightweight virtualization 到 运行 Linux 主机。在我的设置中,我有 10 个主机。每个任务都与一个主机相关联(随机选择)。

到目前为止我所做的是,我已经将任务分配给 10 个主机(根据它们的关联)并在后台调度它们 random_sleep(小于 t ) 无需等待它们完成。

$ sleep random_duration && do_task &

但是,当 n 很大时 (> 2000),这会导致超过最大用户进程数。

或者,我想到了为每个主机创建一个线程,在前台一个一个的调度任务(上一个结束后开始下一个)。但是,在这种方法中,我不能保证 n 个任务可以在 t.

内完成

解决这个问题的可扩展方法是什么?

假设您可以通过某种方式跟踪 运行 任务的数量,那么我看到了一个解决方案。访问或 hard-code MAX_PROCESSES 限制。将所有进程放入一个队列(或任何集合)中。如果n < MAX_PROCESSES(剩下一些用于正常的系统工作),那么你已经知道如何处理这些工作了。

其中 n 太大,则仍然计算调度间隔 time_allowed * processor_count / n,但仅调度前 MAX_PROCESSES * ratio 个任务,对于某些 ratio < 1.0。在处理器之间平均分配它们。随着流程完成(可能是当一半的计划完成时),然后安排另一批任务,始终保持活动任务的数量略多于 processor_count(在您的示例中为 10),但低于 MAX_PROCESSES.

这能解决您的问题吗?