解读:并发编程知识体系
这节课我给大家解读下并发编程的知识体系。
知识体系结构
如图:这块知识可以分成4个维度去看,最上面的维度是解决方案。就是哪些场景可以用到并发编程,具体用什么手段去处理?比如说发红包怎么处理、抢购怎么处理、内存索引怎么处理、大量数据统计怎么处理?
下面一层是工具:想要出具解决方案,除了要了解自己遇到的问题,还需要学解决方案之下的一个个工具。Java提供了多种锁、同步器、并发数据结构,以及基于ExecutorService的轻量级计算框架。
再往下是Java底层能力:在解决问题的时候,我们要知道应该用那种工具,用那种能力?为了弄清,不同的场景需要用什么能力,我们就要深入这些工具的原理。深入原理,就免不了再往下了解这些工具具体是怎么实现的。这样就需要学习CAS/AQS/Lock/Condition这些——这些底层能力我们通常不会直接用到,而是去用Java提供的数据结构,比如BlockingQueu,TaskForkPool等。
在下面是真正的**底层,**可以和操作系统知识对应上,比如:context-switch什么时候发生,atomic如何实现,死锁和饥饿何时发生。
并发编程的知识图谱
大家经常会问我:
- 并发编程学到什么程度?
- 如果没处理过高并发能不能进大厂?
我觉得对于一名优秀的程序员,并发领域你应该是没有知识死角到。做到这一点,即便你没有做过高并发的场景,当你面对面试官,聊起并发的场景,依然可以和面试官说的头头是道。这样面试官就不用太纠结于你是否有实际的高并发经验,一样可以因为你对知识本身的了解程度录用你。 这也是我教学的目标。
根据上面的4层,我帮助大家整理了一份知识图谱。
这是我根据我多年经验和咨询了一些专家,整理的一份知识图谱。这里面我用不同颜色区分开知识的内容,把并发编程部分分成下面几个部分:
- (红色部分的)解决方案层面知识,也是对并发编程的整体认知
- (紫色部分的)JVM底层知识
- (橘黄色部分的)操作系统部分的底层知识
- (绿色和蓝色部分的)工具、框架、应用类知识
大家加油!~
珍惜时间!