《Java并发编程实战》笔记5——性能与测试

性能与可伸缩性

1、小工具

(1)perfar:测试CPU忙碌程度信息

(2)iostat、perfmon:判断是否是I/O密集

2、单个任务的处理时间不仅包括执行任务Runnable的时间,也包括从共享队列中取出任务的时间。如果通过加锁来保护队列的状态,那么当一个线程从队列中取出任务时,其他需要获取下一个任务的线程就必须等待,这就是任务处理过程中的串行部分。

在所有的并发程序中都包含一些串行部分

3、减小锁的竞争

(1)缩小锁的范围

(2)减小锁的粒度

如果一个锁需要保护多个相互独立的状态变量,那么可以将这个锁分解为多个锁,并且每个锁只保护一个变量,从而提高可伸缩性

eg:

(3) 锁分段

参考ConcurrentHashMap源码

并发程序测试

1、基本概念

吞吐量:一组并发任务中已完成任务所占比例

响应性:请求从出发到完成之间的时间

可伸缩性:指在增加更多资源的情况下(通常指cpu),吞吐量的提升情况

2、避免性能测试的陷阱

(1)垃圾回收

(2)动态编译

(3)无用代码的消除

要编写有效的测试程序,就需要告诉优化器不要将基准测试当做无用代码优化掉。这就要求在程序中对每个计算结果都要通过某种方式来使用,这种方式不需要同步或者进行大量运算。 

(4)对代码路径的不真实采样

(5)不真实的竞争程度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值