zoukankan      html  css  js  c++  java
  • 第一部分:并发理论基础07->安全性,活跃性及性能问题

    1.安全性问题

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

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

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

    2.活跃性问题

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

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

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

    3.性能问题

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

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

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

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

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

    4.总结

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

    原创:做时间的朋友
  • 相关阅读:
    [cdq分治][树状数组] Bzoj P3262 陌上花开
    [Prufer序列] Bzoj P4766 文艺计算姬
    [欧拉回路][并查集] Bzoj P3706 反色刷
    [欧拉回路][dfs] Uoj #117 欧拉回路
    [并查集][Tarjan] Bzoj P5017 炸弹
    day18
    day17
    树形DP学习笔记
    [分治]JZOJ 6308 中间值
    [贪心][完全背包]JZOJ 6309 完全背包
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14955350.html
Copyright © 2011-2022 走看看