测试性能遇到一个问题。请看代码...
public static void main(String[] args) throws Exception { final HelloService service = RpcFramework.refer(HelloService.class, "127.0.0.1", 1234); int numTasks = 10000; ExecutorService pool = Executors.newFixedThreadPool(10); long time = System.currentTimeMillis(); for (int i = 0; i < numTasks; i++) { pool.execute(new Runnable() { @Override public void run() { service.hello("word"); service.add(1, 2); } } ); } System.out.println("demotime:" + (System.currentTimeMillis() - time)); //25 System.out.println("singleThread:" + getTotalTimeForSingleThreadMultiExecute(service)); //23751 } public static long getTotalTimeForSingleThreadMultiExecute(HelloService service) throws Exception{ long time = System.currentTimeMillis(); for(int i=1;i<=10000;i++){ service.hello("word"); service.add(1, 2); } return (long)(System.currentTimeMillis() - time); }
在这里我用1W个线程,每个调用方法一次和用一个线程调用方法1W次。为什么时间差距那么大。
第一种:23751ms
第二种:25ms
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
恩,我换成NIO方式。同样条件,性能差距缩小不少。
因为你是阻塞的rpc调用,10000个线程可以同时工作,当然比一个线程快。一个线程只能处理完一个再处理下一个
我用的是RPC,没用NEW对象
new 了一万个对象了