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

1.安全性问题

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

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

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

2.活跃性问题

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

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

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

3.性能问题

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

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

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

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

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

4.总结

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

posted @ 2021-06-30 17:00  SpecialSpeculator  阅读(85)  评论(0编辑  收藏  举报