【高并发】学好并发编程,需要掌握这些核心知识体系!!

简介: 很多小伙伴问我:我在大学时候就学习了多线程,工作后,自己也看过不少有关多线程和并发编程的书籍和视频,为啥真正到工作的时候,我还是不知道在项目中哪里会用到并发编程。我知道有关于并发编程的各个知识点,但是没办法将这些知识点串起来,形成知识体系。冰河,你能不能推一篇文章,讲讲如何学习并发编程,如何将并发编程的各个知识点串成知识体系呢?今天,我们就一起来探讨下有关于并发编程的核心知识体系。

并发编程的核心

我们先来看下并发编程的三大核心知识图。

微信图片_20211119172858.jpg

核心问题

要想学好并发编程,首先要理解三个核心的问题:分工,同步和协作(《【高并发】要想学好并发编程,关键是要理解这三个核心问题》)。

诡异的问题

并发编程并不像普通业务中的CRUD那么简单,往往在并发编程中会出现各种各样诡异的Bug问题(《【高并发】导致并发编程频繁出问题的“幕后黑手”》),而且这些问题也不好复现。究其根本原因,是操作系统的CPU与内存和I/O存在速度差异,而操作系统和编译器在解决这些速度差异带来的问题时,又引入了可见性(《【高并发】解密导致诡异并发问题的第一个幕后黑手——可见性问题》)、原子性(《【高并发】解密导致并发问题的第二个幕后黑手——原子性问题》)、有序性(《【高并发】解密导致并发问题的第三个幕后黑手——有序性问题》)问题,而这三个核心问题,就是导致并发编程出现各种诡异Bug的根本所在。

如何解决问题

在Java中,如何解决并发编程中的可见性、原子性和有序性问题呢?在Java中提供了内存模型和互斥锁的方案来解决这些问题。在Java的内存模型中,有一个很重要的原则,那就是:Happens-Before原则(《何为Happens-Before原则?这次彻底懂了!》)。通过Java的内存模型,能够解决可见性和有序性问题(《【高并发】如何解决可见性和有序性问题?这次彻底懂了!》),对于如何解决原子性问题,我们使用的是互斥锁方案(《【高并发】如何使用互斥锁解决多线程的原子性问题?这次终于明白了!》)。

互斥锁带来的问题

互斥锁在是解决并发问题的核心方案,但是一不留神就会引起死锁(《【高并发】高并发环境下诡异的加锁问题(你加的锁未必安全)》、《【高并发】优化加锁方式时竟然死锁了!!》)

优化加锁方式

既然互斥锁会带来死锁的问题,那我们如何优化加锁的方式呢?(《【高并发】高并发场景下如何优化加锁方式?看完这篇我确实明白了!!》)

线程知识

线程的生命周期(《【高并发】线程的生命周期其实没有我们想象的那么简单!!》)、高并发场景下我们到底创建多少线程合适(《【高并发】高并发场景下创建多少线程才合适?一条公式帮你搞定!!》)?为什么局部变量就是线程安全的(《【高并发】终于弄懂为什么局部变量是线程安全的了!!》)?为什么很多小伙伴面试会栽在InterruptedException上(《【高并发】由InterruptedException异常引发的思考》)?我可以用Java中的面向对象的思想写好并发程序,你信吗(《【高并发】信不信?以面向对象的思想是可以写好高并发程序的!》)?

核心案例

秒杀系统架构解密(《【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!》)

分布式锁架构解密(《【高并发】高并发分布式锁架构解密,不是所有的锁都是分布式锁!!》)

分布式限流理论(《【高并发】如何实现亿级流量下的分布式限流?这些理论你必须掌握!!》)

分布式限流算法(《【高并发】如何实现亿级流量下的分布式限流?这些算法你必须掌握!!》)

实现HTTP接口限流(《【高并发】亿级流量场景下如何为HTTP接口限流?看完我懂了!!》)

实现分布式限流(《【高并发】亿级流量场景下如何实现分布式限流?看完我彻底懂了!!》)

更多内容

有关更多并发编程的知识,小伙伴们可以到【高并发专题】进行系统学习。

好了,今天就到这儿吧,我是冰河,我们下期见!

相关文章
|
3月前
|
算法 安全 Java
深入理解后端开发中的并发编程
【2月更文挑战第7天】在后端开发中,要实现高性能、高并发的服务,必须深入理解并发编程。本文将介绍并发编程的基础知识,包括线程、锁、CAS等,并结合实例讲解如何处理并发问题。
22 0
|
26天前
|
Java Go 调度
Go语言并发编程原理与实践:面试经验与必备知识点解析
【4月更文挑战第12天】本文分享了Go语言并发编程在面试中的重要性,包括必备知识点和面试经验。核心知识点涵盖Goroutines、Channels、Select、Mutex、Sync包、Context和错误处理。面试策略强调结构化回答、代码示例及实战经历。同时,解析了Goroutine与线程的区别、Channel实现生产者消费者模式、避免死锁的方法以及Context包的作用和应用场景。通过理论与实践的结合,助你成功应对Go并发编程面试。
24 3
|
4月前
|
存储 缓存 Java
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你认识和了解JMM并发模型的基本原理
每位Java开发者都了解到Java字节码是在Java运行时环境(JRE)上执行的。JRE包含了最为关键的组成部分:Java虚拟机(JVM),它负责分析和执行Java字节码。通常情况下,大多数Java开发者无需深入了解虚拟机的内部运行原理。即使对虚拟机的运行机制不甚了解,也不会对开发工作产生太多影响。然而,对JVM有一定了解的话,将更有助于深入理解Java语言,并解决一些看似困难的问题。
61 4
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你认识和了解JMM并发模型的基本原理
|
10月前
|
缓存 负载均衡 算法
我佛了!Java开发者福音:并发编程源码剖析+高并发系统搭建
多线程和高并发的关系和区别 “高并发和多线程”总是被人一起提起,给人感觉两者好像相等,实则 高并发 ≠ 多线程 多线程 多线程是Java的特性,因为现在cpu都是多核多线程的,可以同时执行几个任务,为了提高jvm的执行效率,Java提供了这种多线程的机制,以增强数据处理效率。多线程对应的是cpu,高并发对应的是访问请求,可以用单线程处理所有访问请求,也可以用多线程同时处理访问请求。
|
8月前
|
架构师 Java API
架构师学习笔记之:并发编程(图解原子操作)
说在前面的话 正如我开篇所说,我们要整理一些java并发编程的学习文档,这一篇就是第一篇:原子操作。 主要说什么是原子操作,如何实现原子操作以及java中的原子操作类。 开酒,满上 什么是原子操作 什么是原子操作,所谓原子操作,就是一个操作是不能打断的操作。嗯.......确切的说应该是不被其他线程或者任务影响的操作。
|
10月前
|
存储 算法 前端开发
|
10月前
|
Ubuntu Java 编译器
|
11月前
|
算法 数据库 C语言
聊一聊编程
聊一聊编程
64 0
|
SQL 设计模式 容灾
如何通过项目更好的学习并发编程?
秒杀系统最大的几个挑战就是:巨大的瞬时流量,热点数据,刷子流量,商品超买和库存超卖问题,这次冰河会带你从方案、架构和代码等多个方面解决这些核心问题。跟冰河一起开启一段新的技术旅程,在接下来的一段时间内,我要手把手教你搭建并研发一套抗瞬时百万流量的秒杀系统,真正贴近大厂核心项目,为你的职业生涯保驾护航
124 0
如何通过项目更好的学习并发编程?
面试官:小伙子我们先来唠唠并发编程的几大核心知识点
并发编程算是Java的一个难点,经常做业务相关的程序员基本上用不到juc的包,但是这些知识点十分重要,所以不管在哪里,时刻保持学习真的很重要。