方法参数为方法引起的性能问题

大憨熊 提交于 2020-02-26 12:32:10
package top.hh.consumer.service;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
import top.hh.service.UserServiceApi;
import java.util.List;

@Service
public class LoginServiceImpl {

    //failfast快速失效,只发起一次调用,失败立即报错
    @Reference(cluster = "failfast", retries = 0, interfaceClass = UserServiceApi.class, lazy = true, check = false, timeout = 50000)
    UserServiceApi userServiceApi;

    /**
     * 测试rpc直接传参数耗时 1秒
     */
    public String testprc1() {
        String s1 = rpc1("1");
        String s2 = rpc2("2");
        long start = System.currentTimeMillis();
        String str = userServiceApi.getTest(s1, s2);
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start));
        return "" + (end - start);
    }

    /**
     * 测试rpc参数为方法耗时 3秒
     */
    public String testprc2() {
        long start = System.currentTimeMillis();
        String str = userServiceApi.getTest(rpc1("1"), rpc2("2"));
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start));
        return "" + (end - start);
    }

    /**
     * 测试本地参数为方法耗时 2秒
     */
    public String test3() {
        long start = System.currentTimeMillis();
        test(rpc1("1"), rpc2("2"));
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start));
        return "" + (end - start);
    }

    public static void main(String[] args) {
        new LoginServiceImpl().testprc2();//耗时:2006
    }

    private String test(String str1, String str2) {

        return "";
    }


    private String rpc1(String str) {

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "rpc1";

    }

    private String rpc2(String str) {

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "rpc2";

    }
}
总结:如果是本地调用方法中参数为方法,大不了执行这些参数方法并发执行,执行整体的方法为参数方法执行完成后执行,没什么问题就是串行化呗。

但是如果RPC调用多增加一些不必要的耗时有可能使方法超时失败。而且这些参数中方法为RPC调用,最好是在上边赋值给变量,不然多个参数并发执行顺序可能会有问题。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!