扩展性

java并发编程——性能和扩展性

夙愿已清 提交于 2019-12-17 23:33:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 第一部分:对性能的思考 并发编程的最主要目的是提高程序的运行性能,线程可以使程序更加充分的利用系统的可用处理能力,从而提高系统的资源利用率。然而使用多线程时也会引入额外的开销,这些开销包括:线程之间的协调(加锁,内存同步等)、增加的的上下文切换、线程的创建和销毁和线程的调度等等。如果过度以及不恰当的使用线程,这些开销甚至会抵消由于提高吞吐量、计算能力带来的性能提升。一个设计糟糕的多线程程序其性能可能比相同功能的串行程序效率还低。 提升性能意味着用更少的资源做更多的事情。资源的范围很广,比如CPU,内存,网络带宽,IO,磁盘空间等等。当操作性能由于某种特定的资源而受到限制时,我们通常称为资源密集型操作,比如CPU密集型等等。 要想通过并发来获得良好的性能,需要努力做好两件事:要有效的利用现有的资源,以及新的处理资源出现时程序能够有效的利用新增的资源。从性能监视的视角来看,CPU需要尽可能保持忙碌状态(当然这不意味着把CPU用在一些无用的计算上)。 应用程序的性能可以通过多个指标来衡量,比如一些指标(服务时间,等待时间)用来衡量运行速度,另一些指标(生产量、吞吐量)来衡量处理能力。因此,“多快”、“多少”是性能优化的两个不同方向,它们相互独立,有时甚至是互相矛盾的。因此,在优化之前必须要先确保以下几点: 第一