java - 如何实现/模拟作业调度程序?

标签 java c++ scheduler job-scheduling

<分区>

我想开发一个基本的作业调度程序,它在新作业进入队列时接受它们并安排它们并重新安排作业以满足它们的要求。

我尝试将调度程序实现为对象的队列,其中对象的形式为

class queueItem{
    job j;
    long start,end,duration;
    Boolean isStart,isEnd;
}

那么,这是一种模拟作业调度的好方法吗?或者是否有更好的实现来调度给定作业列表的开始、结束、持续时间,比如使用一种先发制人算法。 就此而言,这可能是任何语言。只是一些关于如何处理它的提示会很棒。 提前致谢:)

最佳答案

对于scheduler的意义来说太板了。 - 被安排的工作的性质是什么? - 调度的要求和策略是什么?

一般来说,一个调度器由几个逻辑组件组成

  1. job picker,选择下一份工作的逻辑。
  2. 上下文切换器,执行实际的作业切换(保存/恢复上下文信息,停止/启 Action 业)
  3. 触发器,这通常是定时器,但其他事件也很有用。
  4. 可选的会计,这可能反过来为求职者提供统计数据。

对于支持抢占式调度的系统,作业必须是可中断的。

对于一个体面的调度程序,IMO 它应该支持事件(时间和其他事件)的优先级、暂停和阻塞。

这可能具有以下数据布局:

  • LIST 活跃 [ ... ];//作业列表数组,每个优先级一个列表
  • LIST 睡了;//暂停的工作
  • 列出僵尸;//完成作业,等待清理
  • 工作* current_job;
  • 时间过去了;//工作切换后耗时
  • 时间量;//当前工作的预算直到下一次切换

注意这可能过于简单了。

关于java - 如何实现/模拟作业调度程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860048/

相关文章:

java - 捕获 Exception 或某种类型的异常之间有什么性能差异吗? - java

c++ - 让用户指定数组大小在 XCode 中有效,但在 Visual Studio 中无效

rest - 带有 REST API 的开源作业调度程序

TYPO3:通过调度程序发布工作区编辑?

java - 使用正则表达式查找 2 个括号之间的数字

JavaFX:在运行时更改应用程序语言

java - 无法在 Debug模式下启动 hybris

c++ - 程序逻辑应该驻留在 gui 对象类中还是在类的外部?

c++ - 如何检测字符串文字

multithreading - linux上线程多的进程会比一个线程的进程有更多的cpu时间吗?