随着硬件性能的迅猛发展与大数据时代的来临,并发编程日益成为编程中不可忽略的重要组成部分。简单定义来看,如果执行单元的逻辑控制流在时间上重叠,那它们就是并发(Concurrent)的。并发编程复兴的主要驱动力来自于所谓的“多核危机”。正如摩尔定律所预言的那样,芯片性能仍在不断提高,但相比加快 CPU 的速度,计算机正在向多核化方向发展。正如 Herb Sutter 所说,“免费午餐的时代已然终结”。为了让代码运行得更快,单纯依靠更快的硬件已无法满足要求,并行和分布式计算是现代应用程序的主要内容,我们需要利用多个核心或多台机器来加速应用程序或大规模运行它们。
并发编程是非常广泛的概念,其向下依赖于操作系统、存储等,与分布式系统、微服务等,而又会具体落地于 Java 并发编程、Go 并发编程、JavaScript 异步编程等领域。云计算承诺在所有维度上(内存、计算、存储等)实现无限的可扩展性,并发编程及其相关理论也是我们构建大规模分布式应用的基础。
可能有的人就会说了:我工作中用不到并发啊?
但事实上面试时并发编程这块还是很重要的,需要大家去捡起这方面的知识来。
这篇文章就主要与大家谈一谈Java领域的并发,以及JAVA并发工具,还与大家谈谈其他领域的并发问题。
大家可以先看一下脑图,让自己脑子里对并发的有一个清晰的认知。
看完脑图后如果你还还觉得自己对并发编程原理方面理解一点都不透彻,面试也会有点发怵,那么不妨来看看下面这4份并发编程神仙笔记。
以并发、并行为主线,穿插讲解
进程与线程
Java线程
共享模型之管程
共享模型之内存
共享模型之无锁
共享模型之不可变
共享模型之工具
并发编程乃至一般性编程在技术原理上已经走到了尽头,相关技术也已经在一些语言平台上得到采纳和应用。但出于存在的极个别问题,以及对应用理解的不足,导致在实践中,它们也都还欠缺最后那么一点火候。同时,更多人是依赖平台提供的手段在理解处理问题,而没有从根本上考虑过这些问题,也是应用发展缓慢的一个原因。我们做开发的,首先还是得把底层原理学扎实了才行。这四份笔记也可以让大家查漏补缺。另外还整理了一些额外的相关并发编程资料,以及一些xmind脑图。