第一部分:并发理论基础07->安全性,活跃性及性能问题

1.安全性问题

线程安全:本质上就是正确性。
避免原子性问题,可见性问题,有序性问题,就是线程安全的程序

什么情况需要考虑安全性问题?
存在共享数据并且该数据会发生变化。多线程同时读写同一数据。

如果不共享数据,状态就不会发生变化
ThreadLocal,TLS ,不变模式

2.活跃性问题

某个操作无法执行下去
死锁就是活跃性问题

活锁:等待一个随机事件就可以了

饥饿:线程因无法访问所需资源而无法执行下去

3.性能问题

锁的国度使用,导致串行范围过大,体现不了多线程优势了

串行的百分比5%
如果多线程呢?

第一,使用锁会带来性能问题,解决方案呢?
使用无锁算法和数据结构
使用Thread Local,copy-on-write,乐观锁
java并发包里的原子类也是无锁的数据结构。Disruptor无锁的内存你队列

第二,减少锁持有的时间
细粒度锁ConcurrnetHashMap,分段锁技术,读写锁,读无锁,写有所锁

性能方面的度量指标?
吞吐量:单位时间内能处理的请求数量,吞吐量越高,性能越好。
延迟:从发出请求到收到响应的时间,延迟越小,性能越好。
并发量:同事处理的请求数量,并发量增加,延迟会增加,延迟这个这表要基于并发量来说,

4.总结

并发程序
重点关注安全性,活跃性,及性能;安全性方面注意数据竞争和竞态条件,活跃性方面注意死锁,活锁,饥饿等问题。

posted @   SpecialSpeculator  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示