User.java
上传用户:ganshun56
上传日期:2020-06-06
资源大小:27k
文件大小:7k
源码类别:

网格计算

开发平台:

Java

  1. /*
  2.  * Author: Anthony Sulistio
  3.  * Date: November 2004
  4.  * Description: A simple program to demonstrate of how to use GridSim
  5.  *              workload trace functionality.
  6.  */
  7. import java.util.*;
  8. import eduni.simjava.*;
  9. import gridsim.*;
  10. /**
  11.  * This class basically sends one or more Gridlets to a particular
  12.  * grid resource entity.
  13.  */
  14. class User extends GridSim
  15. {
  16.     private String name_;   // my entity name
  17.     private int myId_;      // my entity ID
  18.     private GridletList list_;          // a list storing new Gridlets
  19.     private GridletList receiveList_;   // a list storing completed Gridlets
  20.     /**
  21.      * Creates a new User entity
  22.      * @param name          this entity name
  23.      * @param bandwidth     baud rate of this entity
  24.      * @param totalGridlet  total number of Gridlets created
  25.      * @throws Exception    This happens when name is null or haven't
  26.      *                      initialized GridSim
  27.      */
  28.     User(String name, double bandwidth, int totalGridlet) throws Exception
  29.     {
  30.         super(name, bandwidth);
  31.         this.name_ = super.get_name();
  32.         this.myId_ = super.get_id();
  33.         this.receiveList_ = new GridletList();
  34.         this.list_ = new GridletList();
  35.         System.out.println("Creating a grid user entity with name = " +
  36.                 name + ", and id = " + this.myId_);
  37.         // Creates a list of Gridlets or Tasks for this grid user
  38.         System.out.println(name + ":Creating "+ totalGridlet +" Gridlets");
  39.         this.createGridlet(myId_, totalGridlet);
  40.     }
  41.     /**
  42.      * The core method that handles communications among GridSim entities.
  43.      */
  44.     public void body()
  45.     {
  46.         ////////////////////////////////////////////////
  47.         // wait for a little while for few seconds.
  48.         // This to give a time for GridResource entities to register their
  49.         // services to GIS (GridInformationService) entity.
  50.         super.gridSimHold(3.0);
  51.         LinkedList resList = super.getGridResourceList();
  52.         // initialises all the containers
  53.         int totalResource = resList.size();
  54.         int resourceID[] = new int[totalResource];
  55.         String resourceName[] = new String[totalResource];
  56.         // a loop to get all the resources available
  57.         int i = 0;
  58.         for (i = 0; i < totalResource; i++)
  59.         {
  60.             // Resource list contains list of resource IDs
  61.             resourceID[i] = ( (Integer) resList.get(i) ).intValue();
  62.             // get their names as well
  63.             resourceName[i] = GridSim.getEntityName( resourceID[i] );
  64.         }
  65.         ////////////////////////////////////////////////
  66.         // SUBMIT Gridlets
  67.         // determines which GridResource to send to
  68.         int index = myId_ % totalResource;
  69.         if (index >= totalResource) {
  70.             index = 0;
  71.         }
  72.         // sends all the Gridlets
  73.         Gridlet gl = null;
  74.         boolean success;
  75.         for (i = 0; i < list_.size(); i++)
  76.         {
  77.             gl = (Gridlet) list_.get(i);
  78.             // For even number of Gridlets, send with an acknowledgement
  79.             if (i % 2 == 0)
  80.             {
  81.                 // by default - send without an ack
  82.                 success = super.gridletSubmit(gl, resourceID[index]);
  83.                 System.out.println(name_ + ": Sending Gridlet #" +
  84.                        gl.getGridletID() + " with NO ACK so status = " +
  85.                        success + " to " + resourceName[index]);
  86.             }
  87.             // For odd number of Gridlets, send with an acknowledgement
  88.             else
  89.             {
  90.                 success = super.gridletSubmit(gl, resourceID[index],0.0,true);
  91.                 System.out.println(name_ + ": Sending Gridlet #" +
  92.                        gl.getGridletID() + " with status = " + success +
  93.                        " to " + resourceName[index]);
  94.             }
  95.         }
  96.         ////////////////////////////////////////////////////////
  97.         // RECEIVES Gridlets back
  98.         // hold for few period - few seconds since the Gridlets length are
  99.         // quite huge for a small bandwidth
  100.         super.gridSimHold(5);
  101.         // receives the gridlet back
  102.         for (i = 0; i < list_.size(); i++)
  103.         {
  104.             gl = (Gridlet) super.receiveEventObject();  // gets the Gridlet
  105.             receiveList_.add(gl);   // add into the received list
  106.             System.out.println(name_ + ": Receiving Gridlet #" +
  107.                   gl.getGridletID() + " at time = " + GridSim.clock() );
  108.         }
  109.         ////////////////////////////////////////////////////////
  110.         // shut down I/O ports
  111.         shutdownUserEntity();
  112.         terminateIOEntities();
  113.         System.out.println(this.name_ + ":%%%% Exiting body() at time " +
  114.                            GridSim.clock() );
  115.     }
  116.     /**
  117.      * Gets a list of completed Gridlets
  118.      * @return a list of completed Gridlets
  119.      */
  120.     public GridletList getGridletList() {
  121.         return receiveList_;
  122.     }
  123.     /**
  124.      * This method will show you how to create Gridlets
  125.      * @param userID        owner ID of this Gridlet
  126.      * @param numGridlet    total Gridlets to be created
  127.      */
  128.     private void createGridlet(int userID, int numGridlet)
  129.     {
  130.         int k = 0;
  131.         int data = 5000;   // 5 MB of data
  132.         for (int i = 0; i < numGridlet; i++)
  133.         {
  134.             // Creates a Gridlet
  135.             Gridlet gl = new Gridlet(i, data, data, data);
  136.             gl.setUserID(userID);
  137.             this.list_.add(gl);
  138.             k++;
  139.         }
  140.     }
  141.     /**
  142.      * Prints the Gridlet objects
  143.      * @param detail    whether to print each Gridlet history or not
  144.      */
  145.     public void printGridletList(boolean detail)
  146.     {
  147.         LinkedList list = receiveList_;
  148.         String name = name_;
  149.         int size = list.size();
  150.         Gridlet gridlet = null;
  151.         String indent = "    ";
  152.         System.out.println();
  153.         System.out.println("============= OUTPUT for " + name + " ==========");
  154.         System.out.println("Gridlet ID" + indent + "STATUS" + indent +
  155.                 "Resource ID" + indent + "Cost");
  156.         // a loop to print the overall result
  157.         int i = 0;
  158.         for (i = 0; i < size; i++)
  159.         {
  160.             gridlet = (Gridlet) list.get(i);
  161.             System.out.print(indent + gridlet.getGridletID() + indent
  162.                     + indent);
  163.             System.out.print( gridlet.getGridletStatusString() );
  164.             System.out.println( indent + indent + gridlet.getResourceID() +
  165.                     indent + indent + gridlet.getProcessingCost() );
  166.         }
  167.         if (detail == true)
  168.         {
  169.             // a loop to print each Gridlet's history
  170.             for (i = 0; i < size; i++)
  171.             {
  172.                 gridlet = (Gridlet) list.get(i);
  173.                 System.out.println( gridlet.getGridletHistory() );
  174.                 System.out.print("Gridlet #" + gridlet.getGridletID() );
  175.                 System.out.println(", length = " + gridlet.getGridletLength()
  176.                         + ", finished so far = " +
  177.                         gridlet.getGridletFinishedSoFar() );
  178.                 System.out.println("======================================n");
  179.             }
  180.         }
  181.     }
  182. } // end class