package csci3366sample.masterworker.seq; import java.util.List; import csci3366sample.masterworker.FakeTasks; /** * Generic example of master/worker program. * "Tasks" just consist of sleeping for a specified time; times to wait are * generatedly randomly from 1 to a specified maximum. * * Command-line arguments: total tasks, maximum task time, * (optional) "--verbose" for verbose output * * Sequential version. */ public class MasterWorkerSeq { /* variables/constants */ private int numTasks; private int maxTaskTime; private boolean verbose; /** * Main method. */ public static void main(String[] args) { String usageMessage = "parameters: numTasks maxTaskTime [--verbose]"; final int REQUIRED_PARMS = 2; int numTasks = 0; int maxTaskTime = 0; boolean verbose = false; /* process command-line arguments */ if (args.length < REQUIRED_PARMS) { System.err.println(usageMessage); System.exit(1); } try { numTasks = Integer.parseInt(args[0]); maxTaskTime = Integer.parseInt(args[1]); } catch (NumberFormatException e) { System.err.println(usageMessage); System.exit(1); } if (args.length > REQUIRED_PARMS) { if (args[REQUIRED_PARMS].equals("--verbose")) verbose = true; else { System.err.println(usageMessage); System.exit(1); } } /* do processing */ new MasterWorkerSeq(numTasks, maxTaskTime, verbose).doProcessing(); } /** Constructor.*/ public MasterWorkerSeq(int _numTasks, int _maxTaskTime, boolean _verbose) { numTasks = _numTasks; maxTaskTime = _maxTaskTime; verbose = _verbose; } /** Do processing. */ public void doProcessing() { int totalTaskTime = 0; /* start timing */ long startTime = System.currentTimeMillis(); /* build list of tasks */ List taskList = FakeTasks.randomTasks(numTasks, maxTaskTime); /* process tasks */ for (FakeTasks.Task t : taskList) { totalTaskTime += t.time; FakeTasks.TaskResult tr = t.execute(); if (verbose) { System.out.printf("%s\n", FakeTasks.toString(t, tr)); } } /* end timing and print result */ long endTime = System.currentTimeMillis(); System.out.printf("\nsequential version\n"); System.out.printf("number of tasks = %d\n", numTasks); System.out.printf("max task time = %d\n", maxTaskTime); System.out.printf("total task time = %d\n", totalTaskTime); System.out.printf("running time = %g\n", (double) (endTime - startTime) / 1000); } }