java并发编程 性能与伸缩_java并发编程实战11:性能与可伸缩性

11.1 对性能的思考

11.1.1 性能与可伸缩性

可伸缩性:当增加计算资源时(例如CPU、内存、存储容量或I/O带宽),程序的吞吐量或者处理能力能相应地增加。

对于服务器应用程序来说,“多少”这个方面——可伸缩性、吞吐量和生产量,往往比“多快”这个方面更受重视。

11.1.2 评估各种性能权衡因素

避免不成熟的优化,首先使程序正确,然后再提高运行速度——如果它运行得不够快。

以测试为基准,不要猜测。

11.2 Amdahl定律

8f134c7812f5

image.png

N是处理器数,F是串行部分占比。

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

11.2.1 示例:在各种框架中隐藏的串行部分

11.2.2 Amdahl定律的应用

11.3 线程引入的开销

上下文切换的开销(11.3.1)和同步本身的开销(11.3.2),非竞争同步开销比较小,需要关注竞争同步。

竞争同步会引起阻塞(11.3.3),要么是用自旋锁,要么是挂起(大多数JVM),自旋锁适合等待时间短,反之适合挂起。挂起依赖操作系统,并且会引入两次上下文切换和必要的操作系统操作及缓存操作。

11.4 减少锁的竞争

3种方式降低锁的竞争程度:

减少锁的持有时间;

降低锁的请求频率;

使用带有协调机制的独占锁,这些机制允许更高的并发性。

11.4.1谈了缩小锁的范围(快进快出),这应该是用了第1种方式。

11.4.2谈了把一个锁拆分成两个,相对于一把锁,降低了请求频率,第2种方式。

11.4.3更进一步,把锁拆成多个,举例:ConcurrentHashMap,16个分段锁。

11.4.4谈了热点域的问题,当所有操作都对一个地方加锁时就形成了热点,要避免热点带了的可伸缩性问题。

11.4.5讲一些替代独占锁的方法,比如读写锁和源自变量(可以用在11.4.4提到的热点域问题),这是方式3。

11.4.6将如何检测CPU的利用率。

11.4.7专门吐槽对象池这一历史产物。

11.5示例:比较Map的性能

11.6减少上下文切换的开销

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前台: (1)注册登录模块:按照学校的相关规定进行注册和登录。 (2)招聘信息查看:高校毕业生们可以网站首页上查看所有的招聘信息,除此之外还可以输入公司名称或岗位名称进行搜索。 (3)用人单位模块:此模块为宣传用人单位的主要功能模块,具体包括用人单位简介、岗位需求及职责及公司介绍等功能。 (4)就业指导:学生朋友们在就业前可以通过此模块获取指导。 (5)新闻信息:为了让用户们可以了解到最新的新闻动态,本系统可以通过新闻信息查看功能阅读近期的新闻动态。 (6)在线论坛:毕业季的同学们可以通过此模块相互交流。 后台: (1)系统用户管理模块:可以查看系统内的管理员信息并进行维护。 (2)学生管理模块:通过此功能可以添加学生用户,还可以对学生信息进行修改和删除。 (3)用人单位管理模块:管理员用户通过此模块可以管理用人单位的信息,还可以对用人单位信息进行查看和维护。 (4)招聘管理模块:管理员通过此功能发布和维护系统内的照片信息。 (5)就业指导管理模块:通过此模块可以编辑和发布就业指导信息,从而更好的帮助就业季的同学们。 (6)论坛管理:通过论坛管理可以查看论坛中的主题帖及里面的回复信息,除此之外还可以对论坛中的信息进行维护和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值