/bench/kilim/bench/Chain.java
http://github.com/kilim/kilim · Java · 98 lines · 73 code · 15 blank · 10 comment · 13 complexity · 762620c7a40a75236449b0cfb0f767c3 MD5 · raw file
- /* Copyright (c) 2006, Sriram Srinivasan
- *
- * You may distribute this software under the terms of the license
- * specified in the file "License"
- */
- package kilim.bench;
- import kilim.*;
- public class Chain extends Task {
- static class Mbx extends Mailbox<Integer>{}
- static int nTasks = 500;
- static int nMsgs = 10000;
-
- Mbx mymb, nextmb;
- static long startTime;
-
- static Mailbox<Integer> signalMbx = new Mailbox<Integer>();
-
-
- public static void main(String[] args) {
- // Scheduler.setDefaultScheduler(new Scheduler(2)); // 2 threads.
- try {
- for (int i = 0; i < args.length; i++) {
- String arg = args[i];
- if (arg.equalsIgnoreCase("-nMsgs")) {
- nMsgs = Integer.parseInt(args[++i]);
- } else if (arg.equalsIgnoreCase("-nTasks")) {
- nTasks = Integer.parseInt(args[++i]);
- }
- }
- }
- catch (NumberFormatException e) {
- System.err.println("Integer argument expected");
- }
- System.out.println("Num tasks in chain: " + nTasks + ". Num messages sent:" + nMsgs);
- for (int i = 0; i < 5; i++) {
- bench(nMsgs, nTasks);
- }
- System.exit(0);
- }
-
- static void bench(int nMsgs, int nTasks) {
- startTime = System.currentTimeMillis();
-
- Mbx mb = new Mbx();
- Mbx nextmb = null;
- // Create a chain of tasks.
-
- for (int i = 0; i < nTasks; i++) {
- Task t = new Chain(mb, nextmb);
- t.start();
- nextmb = mb;
- mb = new Mbx();
- }
- for (int i = 0; i < nMsgs; i++) {
- nextmb.putnb(0); // enqueue a message for the head of the chain.
- }
- signalMbx.getb();
- System.out.println("Bench finished");
- try {Thread.sleep(500);}catch (Exception ignore) {}
- System.gc();
-
- }
-
- public Chain(Mbx mb, Mbx next) {
- mymb = mb;
- nextmb = next;
- }
-
- int numReceived = 0;
-
- public void execute() throws Pausable {
- while (true) {
- // System.out.println("Waiting: # " + id());
- Integer val = mymb.get();
- // System.out.println("GET ===== # " + id());
- if (nextmb == null) {
- numReceived++;
- if (numReceived == nMsgs) {
- done();
- break;
- }
- } else {
- nextmb.put(val);
- }
- }
- }
-
- public void done() {
- System.out.println("Elapsed time: " +
- (System.currentTimeMillis() - startTime)
- + " ms ");
- signalMbx.putnb(0);
- // System.exit(0);
- }
- }