rpcdispatcherspeedtest.java
来自「JGRoups源码」· Java 代码 · 共 259 行
JAVA
259 行
package org.jgroups.tests;import org.jgroups.*;import org.jgroups.blocks.GroupRequest;import org.jgroups.blocks.MethodCall;import org.jgroups.blocks.MethodLookup;import org.jgroups.blocks.RpcDispatcher;import org.jgroups.util.Util;import java.lang.reflect.Method;/** * Interactive test for measuring group RPCs using different invocation techniques. * @author Bela Ban * @version $Revision: 1.13 $ */public class RpcDispatcherSpeedTest implements MembershipListener { Channel channel; RpcDispatcher disp; String props=null; boolean server=false; // role is client by default int num=1000; int mode=OLD; static final int OLD=1; static final int METHOD=2; static final int TYPES=3; static final int SIGNATURE=4; static final int ID=5; static final long TIMEOUT=10000; static final Class LONG_CLASS=long.class; static final String LONG=long.class.getName(); final Method[] METHODS=new Method[1]; final Object[] EMPTY_OBJECT_ARRAY=new Object[]{}; final Class[] EMPTY_CLASS_ARRAY=new Class[]{}; final String[] EMPTY_STRING_ARRAY=new String[]{}; public RpcDispatcherSpeedTest(String props, boolean server, int num, int mode) throws NoSuchMethodException { this.props=props; this.server=server; this.num=num; this.mode=mode; initMethods(); } final void initMethods() throws NoSuchMethodException { Class cl=this.getClass(); METHODS[0]=cl.getMethod("measure", null); } public long measure() throws Exception { return System.currentTimeMillis(); } public void start() throws Exception { channel=new JChannel(props); channel.setOpt(Channel.LOCAL, Boolean.FALSE); disp=new RpcDispatcher(channel, null, this, this, false, // no deadlock detection false); // no concurrent processing on incoming method calls // disp.setConcurrentProcessing(true); disp.setMethodLookup(new MethodLookup() { public Method findMethod(short id) { return METHODS[0]; } }); channel.connect("RpcDispatcherSpeedTestGroup"); try { if(server) { System.out.println("-- Started as server. Press ctrl-c to kill"); while(true) { Util.sleep(10000); } } else { invokeRpcs(num, mode); } } catch(Throwable t) { t.printStackTrace(System.err); } finally { channel.close(); disp.stop(); } } void invokeRpcs(int num, int mode) throws Exception { long start, stop; int show=num/10; Method measure_method=getClass().getMethod("measure", EMPTY_CLASS_ARRAY); MethodCall measure_method_call=new MethodCall(measure_method, EMPTY_OBJECT_ARRAY); if(show <=0) show=1; start=System.currentTimeMillis(); switch(mode) { case OLD: System.out.println("-- invoking " + num + " methods using mode=OLD"); for(int i=1; i <= num; i++) { disp.callRemoteMethods(null, "measure", EMPTY_OBJECT_ARRAY, EMPTY_CLASS_ARRAY, GroupRequest.GET_ALL, TIMEOUT); if(i % show == 0) System.out.println(i); } break; case METHOD: System.out.println("-- invoking " + num + " methods using mode=METHOD"); for(int i=1; i <= num; i++) { disp.callRemoteMethods(null, measure_method_call, GroupRequest.GET_ALL, TIMEOUT); if(i % show == 0) System.out.println(i); } break; case TYPES: System.out.println("-- invoking " + num + " methods using mode=TYPES"); for(int i=1; i <= num; i++) { disp.callRemoteMethods(null, "measure", EMPTY_OBJECT_ARRAY, EMPTY_CLASS_ARRAY, GroupRequest.GET_ALL, TIMEOUT); if(i % show == 0) System.out.println(i); } break; case SIGNATURE: System.out.println("-- invoking " + num + " methods using mode=SIGNATURE"); for(int i=1; i <= num; i++) { disp.callRemoteMethods(null, "measure", EMPTY_OBJECT_ARRAY, EMPTY_STRING_ARRAY, GroupRequest.GET_ALL, TIMEOUT); if(i % show == 0) System.out.println(i); } break; case ID: System.out.println("-- invoking " + num + " methods using mode=ID"); measure_method_call=new MethodCall((short)0, null); for(int i=1; i <= num; i++) { disp.callRemoteMethods(null, measure_method_call, GroupRequest.GET_ALL, TIMEOUT); if(i % show == 0) System.out.println(i); } break; default: break; } stop=System.currentTimeMillis(); printStats(stop-start, num); } void printStats(long total_time, int num) { double throughput=((double)num)/((double)total_time/1000.0); System.out.println("time for " + num + " remote calls was " + total_time + ", avg=" + (total_time / (double)num) + "ms/invocation, " + (long)throughput + " calls/sec"); } public void viewAccepted(View new_view) { System.out.println("-- new view: " + new_view); } public void suspect(Address suspected_mbr) { ; } public void block() { ; } public static void main(String[] args) { String props=null; boolean server=false; int num=1000; RpcDispatcherSpeedTest test; int mode=OLD; for(int i=0; i < args.length; i++) { if("-props".equals(args[i])) { props=args[++i]; continue; } if("-server".equals(args[i])) { server=true; continue; } if("-num".equals(args[i])) { num=Integer.parseInt(args[++i]); continue; } if("-mode".equals(args[i])) { String m=args[++i].toLowerCase().trim(); if("old".equals(m)) mode=OLD; else if("method".equals(m)) mode=METHOD; else if("types".equals(m)) mode=TYPES; else if("signature".equals(m)) mode=SIGNATURE; else if("ID".equals(m) || "id".equals(m)) { mode=ID; } else { System.err.println("mode " + m + " is invalid"); help(); return; } continue; } help(); return; } try { test=new RpcDispatcherSpeedTest(props, server, num, mode); test.start(); } catch(Exception e) { System.err.println(e); } } static void help() { System.out.println("RpcDispatcherSpeedTest [-help] [-props <props>] " + "[-server] [-num <number of calls>] [-mode <mode>]"); System.out.println("mode can be either 'old', 'method', 'types', signature' or 'id'"); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?