异步性能不如同步?通过压测讨论应该如何设置线程数

本文通过代码实例对比了同步与异步执行的性能,特别是在A、B、C三个服务中,发现异步执行在某些场景下并不占优。压力测试显示,当线程池配置不当,如在CPU密集型任务中使用IO密集型线程池,异步性能甚至低于同步。因此,合理设置线程池参数对于优化异步性能至关重要。
摘要由CSDN通过智能技术生成

1 代码实例

1.1 A服务

声明A服务提供五个方法:

public class BizParamDTO {
    private String field;
}

public interface AService {

    public String a1(BizParamDTO param) throws Exception;

    public String a2(BizParamDTO param) throws Exception;

    public String a3(BizParamDTO param) throws Exception;

    public String a4(BizParamDTO param) throws Exception;

    public String a5(BizParamDTO param) throws Exception;
}

a1-a4休眠100毫秒,a5休眠600毫秒:

@Service
public class AServiceImpl implements AService {

    @Override
    public String a1(BizParamDTO param) throws Exception {
        System.out.println(Thread.currentThread().getName() + ",a1 param=" + param);
        TimeUnit.MILLISECONDS.sleep(100);
        return param.getField();
    }

    @Override
    public String a2(BizParamDTO param) throws Exception {
        System.out.println(Thread.currentThread().getName() + ",a2 param=" + param);
        TimeUnit.MILLISECONDS.sleep(100);
        return param.getField();
    }

    @Override
    public String a3(BizParamDTO param) throws Exception {
        System.out.println(Thread.currentThread().getName() + ",a3 param=" + param);
        TimeUnit.MILLISECONDS.sleep(100);
        return param.getField();
    }

    @Override
    public String a4(BizParamDTO param) throws Exception {
        System.out.println(Thread.currentThread().getName() + ",a4 param=" + param);
        TimeUnit.MILLISECONDS.sleep(100);
        return param.getField();
    }

    @Override
    public String a5(BizParamDTO param) throws Exception {
        System.out.println(Thread.currentThread().getName() + ",a5 param=" + param);
        TimeUnit.MILLISECONDS.sleep(600);
        return param.getField();
    }
}

1.2 B服务

B服务同步调用A服务五个方法:

public interface BService {
    public void b(BizParamDTO param) throws Exception;
}

@Service
public class BServiceImpl implements BService {
    @Resource
    private AService aservice;

    @Override
    public void b(BizParamDTO param) throws Exception {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start("taskB");
        String r1 = aservice.a1(param);
        String r2 = aservice.a2(param);
        String r3 = aservice.a3(param);
        String r4 = aservice.a4(param);
        String r5 = aservice.a5(param);
        List<String> result = Arrays.asList(r1, r2, r3, r4, r5);
        stopWatch.stop();
        System.out.println("b1-costTime=" + stopWatch.getTotalTimeMillis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值