• 聊聊高并发(三十七)整理一下并发基础中的一些知识点


    近期在准备并发基础的PPT,想到了一些知识点,记录下来以后也能够做个參考。大部分的知识点在之前的博客中都多少涉及到了

    这里的并发基础指的是单机多处理器的情况下的一些并发问题,不涉及到分布式环境下的并发问题。


    并发基础主要解决的是可见性,有序性和原子性的问题,让不可控的进程/线程变得能够预測,能够控制行为。


    Java解决可见性/有序性的主要技术是通过Java内存模型来解决的。Java内存模型这个域里面有这些知识点

    1. 可见性问题的根源 -- CPU写操作的延迟

    2. 造成写操作延迟的原因主要是快速缓存的存在,理解缓存的原理,局部性原理,快速缓存的原理等

    3. 解决可见性问题的通用方法 -- 确定一致性需求。有多种一致性模型:线性一致性,顺序一致性,因果一致性,处理器一致性,弱一致性,释放一致性,进入一致性等等

    4. 底层硬件提供了实现一致性需求的能力 -- 内存屏障,比方X86的mfence, sfence, lfence, Lock前缀等等,理解Lock前缀的语义

    5. 底层硬件提供了缓存一致性协议来提供底层同步缓存的能力,注意总线的相互排斥性,缓存一致性流量等

    6. Java内存模型是语义级的内存模型,主要是屏蔽底层硬件提供的内存模型能力的差异,提供了一系列的Java同步操作语法,制定了Happens-before规则

    7. 理解volatile, synchronized, CAS等操作的底层实现原理

    8. 理解Happens-before规则描写叙述的是可见性的问题

    9. 理解指令重排序的概念,理解有序性


    Java解决原子性的问题主要是通过锁/相互排斥来实现的,锁这个问题域里面有这些知识点

    1. 锁的原理,饥饿,公平,自旋,堵塞,管程,条件队列等等概念

    2. 并发编程的三个重要特性:可见性,有序性和原子性。锁解决的问题域

    3. 线程在各个层面的状态控制,JVM中怎样实现线程,操作系统怎样实现线程,线程调度

    4. 自旋 VS 堵塞

    5. 多种经典的自旋锁的实现,比方TAS/TTAS/CLH/MCS lock

    6. 读写锁,可重入锁,时限锁的原理和实现

    7. Object.wait(), Object.notify, Condition等条件队列操作的底层原理

    8. sun.misc.Unsafe类提供的同步能力

    9. Java并发包中的AQS同步器的设计和重点实现

    10. Java并发包中的Semaphore, CountDownLatch, CyclicBarrier等同步器的实现

    11. 一些无锁的数据结构的设计思路及实现,比方无锁队列

    12.锁的优化,比方控制锁的粒度,锁分段,识别和解决死锁/活锁等



    理解了可见性,有序性,原子性的原理和底层实现之后,须要理解一下并发场景下的一些通用的设计思路,高性能server的设计思路


    1. 怎样安全公布一个对象

    2. 线程封闭技术,不可变对象的使用

    3. 控制锁的粒度,锁分段,CopyOnWrite等优化

    4. 生产者消费模型

    5. 线程池的设计和实现

    6. 同步操作转异步操作

    7. 5种IO模型的理解

    8. 高性能server的线程模型设计, reactor / proactor

    9. 使用高效的网络传输 -- NIO的原理,设计和实现,比方epoll / selector / pull, Buffer的使用

    10. 多进程监听一个port vs  单进程监听一个port,  nginx的惊群问题分析


  • 相关阅读:
    MongoDB 数组
    MongoDB 内嵌文档
    MongoDB 聚合操作
    MongoDB 文档的删除操作
    MongoDB 文档的更新操作
    MongoDB 文档的查询和插入操作
    MongoDB 安装和可视化工具
    SSIS 容器
    SSISDB2:SSIS工程的操作实例
    Replication:distribution 中一直在运行 waitfor delay @strdelaytime 语句
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4344048.html
Copyright © 2020-2023  润新知