测试性能遇到一个问题。请看代码...

发布于 2021-12-01 14:35:56 字数 1397 浏览 791 评论 4

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁吢 2021-12-02 09:39:32

恩,我换成NIO方式。同样条件,性能差距缩小不少。

千笙结 2021-12-02 07:47:58

因为你是阻塞的rpc调用,10000个线程可以同时工作,当然比一个线程快。一个线程只能处理完一个再处理下一个

清晨说ぺ晚安 2021-12-02 06:51:15

我用的是RPC,没用NEW对象

只为守护你 2021-12-02 04:38:23

new 了一万个对象了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文