线程:在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
.
这能解决您的问题吗?
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
.
这能解决您的问题吗?