2008-10-18 108 views
3

有了一个工人,谁只能一次执行一个任务(但瞬间任务之间切换)调度与重叠周期性任务

鉴于任务列表的工人,
- 定义为“n秒,每m秒”(例如,5秒,每隔3600秒)

怎么可能我找到最好的出发时间和计算每个任务是什么?

如果每个任务是“1秒,每60秒”时,每个将具有独特的开始第二和计数将是无限的(稳定状态)。
如果它是 “1每4秒秒” 和 “1每3秒秒”,结果将是: “0,无限和3,3次”

- 希望最简单的形式

如果已经有一份任务清单,以“开始秒和次数”详细说明,返回的函数是什么:{start,count}对于额外的{n秒每m秒}任务看起来像?

- (稍微复杂形式 -
如果代替“n秒每米秒”
任务被定义为“n秒每l..o秒”
哪里可以挑一些米的范围L - O(但必须承诺是m,直到任务结束了),
将允许更好的工作人员利用
我将如何选择最好的“M”

回答

0

这种类型的问题很难解决,但相对容易优化。看看模拟退火,大洪水或遗传算法。

+0

你可以建议一个健身功能,不演变每个计数迭代每个任务吗? – 2008-10-18 19:31:44

0

嗯,这里有一个小建议:如果M的的最大公约数是大于或等于n的总和,该解决方案是稳定状态。

我会去的任务集合中的具有n的总和最大值,使得M的的最大公因数大于或等于总和。

+0

这是有道理的 - 像3,4那样,它们相对于素数的GCD为1,所以它不是稳定状态。这可以扩展到产生任何事情吗? – 2008-10-18 19:41:06

1

我认为这取决于你如何定义'最好'。例如,如果您希望任务平均每m秒运行一次,则有一种简单的方法可以使用与Bresenham方法相同的算法来绘制线条(每秒每秒n秒的任务很多当画线时,在m个水平步骤之间散射n个垂直步骤)。为每个任务分配一个计数器和一个步进值(“每3秒1秒”的步骤为1/3)。然后在每个“周期”中将该步骤添加到计数器。当计数器超过零时,该任务应该运行(并从计数器中减去1)。如果您有多个零点以上的计数器,请选择最大的一个。这可能会给你一个对于稍微复杂一点的“足够好”的解决方案。

的“1/4”和“1/3”的例子,虽然喜欢你的声音需要运行的任务“正是”米秒间隔的要求。从列表开始,添加一个新任务以最大化计数并不是一个困难的搜索问题 - 但我不认为这是您需要的。该A(1/4)B(1/4)C(1/2)的例子是加入甲然后B.然后不能被C添加后,得到AB AB XX XX,

我认为有明显的候选者健身功能--n,m,start表可以具有健身功能,该功能是不超过一个任务计划的时间的一部分。如果存在的话,GA /退火将很有可能找到稳定状态的解决方案。但在像(1/4),(1/3)这样的情况下,似乎没有稳态解,定义'最好'也应该定义你的适应度函数。

0

参见w:Scheduling (computing)。该链路包括的调度策略一个很好的列表:

[调度]指 过程在一个 优先级队列分配的优先级的方式。这项任务是由名为 的软件执行的 调度程序。调度关注 主要有:

  • CPU利用率 - 保持CPU的繁忙 尽可能。
  • 吞吐量 - 完成的进程数 每个时间单位的执行次数。
  • 周转时间 - 时间量为 执行特定过程。
  • 等待时间 - 进程在 就绪队列中一直在等待的时间量。
  • 响应时间 - 金额 从提交请求 直到产生第一个 响应时的时间。