本章内容介绍了并发编程中,最吸引人的性能问题。什么会导致性能问题,如何解决性能问题,我们应该在什么情况下着手解决性能问题?
首先要保证程序能正确运行,然后仅当程序的性能需求和测试结果要求程序执行的更快时,才应该设法提高它的运行速度
11.1 对性能的思考
尽管使用多个线程的目标是提升整体性能,但与单线程的方法相比,使用多个线程总会引入一些额外的性能开销。
要想通过并发来获得更好的性能,需要做好两件事:
1. 更有效的利用现有处理资源
2. 在出现新的处理资源时使程序尽可能的利用这些资源
11.1.1 性能与可伸缩性
可伸缩性是指:当增加计算资源时(CPU、内存、存储容量或I/O带宽),程序的吞吐量或者处理能力能相应的增加。
再进行可伸缩性调优时,其目的是设法将问题的计算并行化,从而能利用更多的计算资源来完成更多的工作。
11.1.2 评估各种性能权衡因素
避免不成熟的优化。首先使程序正确,然后再提高运行速度——如果它运行的不够快。
在大多数性能决策中都包含有多个变量,并且非常依赖与运行环境。在使某个方案比其他方案“更快”之前,首先问自己一些问题:
- 更快 的含义是什么
- 该方法在什么条件下运行的更快,低负载还是高负载、大数据集还是小数据集,能否通过测试结果来验证
- 这些条件在运行环境中发生的频率,能否通过测试结果验证
- 在其他不同条件的环境中能否使用这些代码