zoukankan      html  css  js  c++  java
  • FIFO调度器用户提交的作业用到的三个容器

      当运用FIFO调度器时,用户提交的作业放到了三个容器中,核心代码如下:

        synchronized (jobs) {
          synchronized (taskScheduler) {
            jobs.put(job.getProfile().getJobID(), job);
            for (JobInProgressListener listener : jobInProgressListeners) {
              listener.jobAdded(job);
            }
          }
        }
    1. jobs是JobTracker的成员变量,它其中存放的是<JobID,JobInProgress>的key-value对。

        Map<JobID, JobInProgress> jobs = Collections.synchronizedMap(new TreeMap<JobID, JobInProgress>());

      通过jobs.values()方法,我们可以得到一个存放JobInProgress对象的容器,里面有正在运行的作业,失败的作业,完成的作业,因此,我们通过就jobs就可以知道,此刻都是有哪些作业正在运行。

      2. JobQueueJobInProgressListener维护了一个jobQueue,用来管理和调度所有的JobInProgress,如增加作业、移除作业以及更新作业。

      private Map<JobSchedulingInfo, JobInProgress> jobQueue;

      public Collection<JobInProgress> getJobQueue() {

        return jobQueue.values();
      }

    从jobqueue_details.jsp中,我们可以看到,它是通过jobQueue来获取正在运行的作业列表的,作业调度时也是根据jobs来选择优先级高,开始时间早(提交时间即为开始时间)的作业来执行。。

      3. EagerTaskInitializationListener中维护了一个链表,主要用于作业的初始化。

      private List<JobInProgress> jobInitQueue = new ArrayList<JobInProgress>();

    对jobInitQueue根据优先级和startTime进行排序后,后台线程负责对链表中的作业进行初始化。

  • 相关阅读:
    Unique Encryption Keys 暴力学习map,vector 函数
    hdu 1250 Hat's Fibonacci
    匈牙利算法模板 图的二分匹配 hdu 2063 过山车
    hdu 4260 汉诺塔问题 The End of The World
    各种常见文件的hex文件头
    Ubuntu & node.js
    Linux周期性任务的执行指令配置
    MySQL各版本的性能特性(从4.0版本开始)
    Tsung 1.5.0 增加对 WebSocket 和 BOSH 的支持
    ShowSlow+Yslow环境搭建
  • 原文地址:https://www.cnblogs.com/yueliming/p/3080648.html
Copyright © 2011-2022 走看看