第一部分:并发理论基础07->安全性,活跃性及性能问题
1.安全性问题
线程安全:本质上就是正确性。
避免原子性问题,可见性问题,有序性问题,就是线程安全的程序
什么情况需要考虑安全性问题?
存在共享数据并且该数据会发生变化。多线程同时读写同一数据。
如果不共享数据,状态就不会发生变化
ThreadLocal,TLS ,不变模式
2.活跃性问题
某个操作无法执行下去
死锁就是活跃性问题
活锁:等待一个随机事件就可以了
饥饿:线程因无法访问所需资源而无法执行下去
3.性能问题
锁的国度使用,导致串行范围过大,体现不了多线程优势了
串行的百分比5%
如果多线程呢?
第一,使用锁会带来性能问题,解决方案呢?
使用无锁算法和数据结构
使用Thread Local,copy-on-write,乐观锁
java并发包里的原子类也是无锁的数据结构。Disruptor无锁的内存你队列
第二,减少锁持有的时间
细粒度锁ConcurrnetHashMap,分段锁技术,读写锁,读无锁,写有所锁
性能方面的度量指标?
吞吐量:单位时间内能处理的请求数量,吞吐量越高,性能越好。
延迟:从发出请求到收到响应的时间,延迟越小,性能越好。
并发量:同事处理的请求数量,并发量增加,延迟会增加,延迟这个这表要基于并发量来说,
4.总结
并发程序
重点关注安全性,活跃性,及性能;安全性方面注意数据竞争和竞态条件,活跃性方面注意死锁,活锁,饥饿等问题。
原创:做时间的朋友
分类:
java并发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示