Scheduler Client Assignment

From CSE231 Wiki
Jump to navigation Jump to search

Motivation

We learn the basics of using an instance of Scheduler to leave work behind for other processors via the void_fork method. In this case we will use a simple for loop to get the job done. You will likely need to employ a strategy to get around the finality requirement for lambdas.

Code To Investigate

interface Scheduler

The scheduler is intended to be extremely bare bones. It doesn't even have join. It simply has a void_fork method. Runnable is simply an interface with one and only one abstract method: void run(); This means void_fork is suitable for being called with a lambda.

Scheduler  
public interface Scheduler {
	void void_fork(Runnable runnable);
}

SchedulerClient main

SchedulerClient's main method simply creates an implementation of Scheduler (namely ExecutorServiceScheduler) and passes that instance to the output method (which you will implement) along with the number 10. After you have left behind the tasks to print the numbers [0, 10), main will joinAll of the tasks you left behind.

SchedulerClient main  
public class SchedulerClient {
	private static void output(Scheduler scheduler, int N) {
		throw new NotYetImplementedException();
	}

	public static void main(String[] args) throws InterruptedException, ExecutionException {
		ExecutorServiceScheduler scheduler = new ExecutorServiceScheduler();
		output(scheduler, 10);
		scheduler.joinAll();
	}
}

Code To Implement

class: SchedulerClient.java Java.png
methods: output
package: scheduler.group
source folder: student/src/main/java

method: private static void output(Scheduler scheduler, int N) Parallel.svg (parallel implementation required)

Fork N tasks via scheduler.void_fork which print the indices [0..N).

Code To Run

class: SchedulerClient.java CLIENT
package: scheduler.grou
source folder: student/src/main/java

Run SchedulerClient in the scheduler.group package (the file you are editing).

The output should look something like this (not necessarily in this order as it should be parallel).

SchedulerClient output  
0
3
2
1
4
5
6
7
8
9