У меня небольшой вопрос, пытаясь увидеть, где я собираюсь неправильно в следующем фрагменте кода:очереди Java в очередь calculaton не удовлетворены
public void processNextJob() {
/*
* 1. get # of free CPU's still avaialble
* 2. get top most job from priority queue
* 3. run job - put to CPU queue
* 4. develop a CPU queue here
* 5. count cores against freeCPUS and some sort of calculation to sort run times
*/
int freeCPUS = 500;
int availableCPUS = 0;
JobRequest temp = new JobRequest(); // initalised to new JobRequest
Queue q = new LinkedList();
while (true) {
int size = q.size();
for (int i = 0; i < size; i++) {
temp = (JobRequest) q.peek();
if (temp != null) {
availableCPUS += temp.getCores();
}
}
if ((freeCPUS - availableCPUS) >= 0) {
JobRequest nextJob = schedulerPriorityQueue.closestDeadlineJob(freeCPUS - availableCPUS); // returns top job from queue
if (nextJob != null) {
System.out.println("Top priority/edf job:");
printJob(nextJob);
q.add(nextJob);
} else {
System.out.println("Job = null");
}
} else {
break;
}
}
if (temp != null) {
System.out.println("Execution Queue");
for(Object jr : q){
printJob((JobRequest)jr);//print all elements in q
}
}
}
То, что здесь происходит, что я добавив верхний элемент из приоритета и добавление его в новый LinkedList. Но задания, которые я снимаю с приоритета, имеют элемент со значением, называемым «ядрами». Я пытаюсь заставить его взять как можно больше рабочих мест, оставаясь под основным пределом.
temp.getCores()
где я получить значение сердечников
Проблемы у меня в том, что он не добавляя их правильно к моей очереди LinkedList, значению она принимает в изменении оленьей кожи. Моя очередь отображает 5 выходов с ключевым значением «160», но я установил 500 кепок, поэтому очередь не удовлетворяет его вообще
Я не вижу, где я ошибаюсь, добавляя значения из PriorityQueue сделать мои доступные процессоры добраться до определенного предела его находящегося под 500.
EDIT:
public JobRequest closestDeadlineJob(int freeCPUS) {
// find top job to determine if other jobs for date need to be considered
JobRequest nextJob = scheduledJobs.peek(); // return top most job
if (nextJob != null) {
System.out.println("Found top EDF job:");
printJob(nextJob);
// what is it's date?
Date highestRankedDate = nextJob.getConvertedDeadlineDate();
// create a temporary queue to work out priorities of jobs with same deadline
JobPriorityQueue schedulerPriorityQueue = new JobPriorityQueue();
// add the top job to priority queue
//schedulerPriorityQueue.addJob(nextJob);
for (JobRequest jr : scheduledJobs) {
// go through scheduled jobs looking for all jobs with same date
if (jr.getConvertedDeadlineDate().equals(highestRankedDate)) {
// same date deadline, soadd to scheduler priority queue
schedulerPriorityQueue.addJob(jr);
System.out.println("Adding following job to priority queue:");
printJob(jr);
}
}
JobRequest highestPriorityJob = schedulerPriorityQueue.poll();
// this is the item at the top of the PRIORTY JOB queue to return
// remove that item from scheduledJobs
scheduledJobs.remove(highestPriorityJob);
return highestPriorityJob;
} else {
return null;
}
}
Выполняется ли это утверждение - 'System.out.println (« Top priority/edf job: »);'? –
Да, он запускает, говорит мое мое топ-задание из моего приоритета, затем добавляет это задание в связанный список, это всего лишь проверка на то, что я вижу, что он работает, все проходит, но проблема связана с тем, как я добавляю ядра, которые не работает –
И можем ли мы знать, что делает метод 'closestDeadlineJob'? –