深入理解高并发编程
文章平均质量分 92
深入理解高并发编程
小 明
2022博客之星TOP3/博客专家/CSDN后端内容合伙人、InfoQ(极客时间)签约作者。8年开发经验,就职知名金融互联网大厂后端研发专家,专注于面试、后端、源码、架构、算法,擅长高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。
文章底部联系 -> 商务合作 | 技术交流 | 粉丝福利
展开
-
【精通高并发】深入理解C语言基础与汇编下的C语言(二)
本文如题,C语言基础部分不过多赘述,主要讲解结构体、指针的原理,并分析汇编下的C语言。原创 2021-12-18 10:40:34 · 3334 阅读 · 1 评论 -
【精通高并发】深入理解汇编语言基础(一)
本文作为整个系列的开篇为读者讲解机器语言基础,汇编语言基础知识,寄存器的分类与工作原理,文中给出常见的汇编指令方便记忆与查询。原创 2021-12-13 12:25:53 · 130653 阅读 · 5 评论 -
【并发编程】CountDownLatch详解与原理
本文讲解什么是CountDownLatch,CountDownLatch的特点以及使用场景,对CountDownLatch的数据结构与countDown()方法、await()方法源码进行剖析原创 2023-12-03 20:51:28 · 6254 阅读 · 11 评论 -
【并发编程】CopyOnWriteArrayList详解与原理
本文讲解什么是CopyOnWriteArrayList以及他的特点、适用场景、缺点,CopyOnWriteArrayList的数据结构、add()、get() 方法、remove()方法的实现原理。原创 2023-12-03 15:11:41 · 4631 阅读 · 4 评论 -
【并发编程】volatile实现原理解析
本文深入浅出讲解了什么是volatile与volatile 的使用场景,对什么是 happens-before 关系进行不同场景分析,最后分析volatile 可见性(lock指令)与禁止重排(内存屏障)的原理,最后给出两道常见面试题“volatile 和 synchronized 的关系”、“单例双重检查锁模式中为什么要 volatile”作为本文扩展。原创 2023-12-02 22:27:29 · 2360 阅读 · 7 评论 -
【并发编程】什么是死锁?死锁如何解决?线上发生死锁应该怎么办?
本文讲解死锁是什么,死锁产生的4个条件以及如何避免死锁,并根据实际线上发生死锁应该怎么办,如何用命令行和代码定位死锁进行讲解。原创 2023-12-02 19:35:40 · 2168 阅读 · 0 评论 -
【并发编程】ConcurrentHashMap底层结构和原理
本文JDK1.8中ConcurrentHashMap底层实现以及put、get源码,对常见面试题ConcurrentHashMap的jdk7和8的区别、ConcurrentHashMap与Hashtable的区别进行讲解。原创 2023-11-28 22:56:33 · 2040 阅读 · 8 评论 -
【并发编程】ThreadLocal详解与原理
本文讲解ThreadLocal是什么、ThreadLocal的数据结构以及ThreadLocal源码set()/get()/remove()解析,ThreadLocal使用场景,如何正确的使用ThreadLocal,ThreadLocal内存泄露原因。原创 2023-11-22 22:48:19 · 2882 阅读 · 6 评论 -
【并发编程】Synchronized的使用
如果synchronized修饰的是实例方法,对应的锁则是对象实例,进入同步代码前要获得当前实例的锁。如果synchronized修饰的是静态方法,对应的锁则是当前类的Class实例,进入同步代码前要获得当前类对象的锁。如果synchronized修饰的是代码块,对应的锁则是传入synchronized的对象实例(锁是括号里面的对象),对给定对象加锁,进入同步代码库前要获得给定对象的锁。原创 2023-11-20 22:25:12 · 3297 阅读 · 7 评论 -
【并发编程】并发问题解决思路
解决并发编程方法分为两大类:无锁有局部变量、不可变对象、ThreadLocal、CAS,有锁有synchronized、Lock。原创 2023-10-24 23:57:29 · 737 阅读 · 14 评论 -
【并发编程】多线程读写同一变量的并发问题(并发编程启动)
通过下单链路扣减库存引出了多线程并发访问共享变量的问题,接着简单介绍了一下计算机CPU内存模型、Java的内存模型,并基于Java的内存模型一步一图分析线程安全问题产生的原因。原创 2023-10-23 21:57:06 · 1676 阅读 · 29 评论 -
【精通内核】CPU控制并发原理CPU中断控制内核解析
本文讲解CPU角度的中断控制,CPU层面并行并发和中断控制的原理,现代CPU的缓存结构和架构图、CPU缓存一致性的源码原理,以及CPU如何通过编译器的屏障与指令实现系统屏障,经过内联汇编代码验证之后,证明上述所说的 Linux 内核用 volatile 关键字实现系统屏障(指令重排),加深对系统屏障的内核源码和原理的理解原创 2022-09-03 22:45:28 · 19138 阅读 · 125 评论 -
解读《深入理解计算机系统(CSAPP)》第9章虚拟内存
虚拟内存是什么,内存和物理硬件的使用什么间接,分配器怎么回收内存?原创 2022-03-26 23:24:49 · 1845 阅读 · 1 评论 -
解读《深入理解计算机系统(CSAPP)》第10章系统级IO
高级别IO有标准IO库 I/O函数……大多数时候高级别I/O函数都运行良好,为什么我们还要学Unix I/O?了解Unix I/O将帮助你理解其他的系统概念,要深入理解其他概念,必须理解I/O原创 2022-03-27 23:06:12 · 1825 阅读 · 1 评论 -
【高并发项目实战】工程模块化与活动会场静态化架构原理解析
活动会场往往聚集着大量流量,千万甚是上亿级别很平常,我们做架构设计的时候,应该前端、后端、网关、配置等等都要考虑进去才是一个合格的架构,本文采取工程模块化与活动会场静态化做架构并讲解其设计原理。......原创 2022-08-15 07:30:00 · 923 阅读 · 4 评论 -
Java核心技术之什么是反射
那么什么是反射呢,怎么回答呢?相信你看完文章就能学会官网回答 + 反射的属性(优缺点、性能分析) + JVM中反射的应用 + Spring中反射的应用的回答,带你玩转反射在框架设计中的应用以及反射实战应用场景和总结原创 2020-09-25 18:50:47 · 1331 阅读 · 0 评论 -
【小明】谈谈你对Lock和AQS的理解【建议收藏】
一、直接开始谈Lock【简单谈一下 Lock使用,实现类源码和原理,点到为止(在说完AQS时可以回过头谈一谈 ReentrantReadWriteLock 原理或者自己设计一个锁或者AQS怎么做),抛出JDK8中新的优化类,证明咱技术还可以,快速过,暂时重点放在后面 AQS 上面】Lock是JDK提供给我们的显示锁,一般我们在try块前使用 lock() 方法获取锁,finally 块中调用unlock() 释放锁,通常除了获取释放,我们还使用 lockInterruptibly() 可中断地获取锁原创 2021-09-13 23:54:43 · 851 阅读 · 6 评论 -
【小明】谈谈你对多线程的理解【建议收藏】
一、【基础】首先谈谈什么是进程什么是线程,为什么要用多线程【背诵直接答,*亮点】 *在任何一个操作系统和cpu中,执行的时候必须执行程序的指令,不管什么语言最后都要转为指令,保存指令的程序,在Linux中保存程序有两种方式,在windows是.exe,我们在执行程序时,需要把二进制代码拿到内存中,开辟的空间就是进程的资源,进程可以读写数据执行代码,进程和线程在 操作系统 层面的控制块都是task start,但是线程是需要共享进程的空间,所以两个进程中共享了部分资源就叫线程*。...原创 2021-09-12 21:24:25 · 1707 阅读 · 10 评论 -
【并发编程】谈谈你对线程池的理解【建议收藏】
一、什么是线程池?为什么要用线程池?【背诵直接答,什么是线程池,好处,50s左右】首先谈线程池要说下什么是线程池,线程池 是一种多线程处理方式,创建若干个可执行的线程放入一个容器(队列)中,从容器(队列)中获取线程不用自行创建,使用完毕不需要销毁线程而是放回容器(队列)中,从而减少创建和销毁线程对象的开销。使用线程池的好处,第一可以降低资源消耗,重复利用已创建的线程;第二:提高响应速度,任务可以不需要等到线程创建就能立即执行;第三:提高线程的可管理性。统一分配、调......原创 2021-09-12 15:48:22 · 1616 阅读 · 10 评论 -
解读《深入理解计算机系统(CSAPP)》第12章并发编程
并发可以看做是一种操作系统内核用来运行多个应用程序的机制,并发不局限于内核原创 2022-04-02 00:07:03 · 1706 阅读 · 1 评论 -
并发-线程并发工具类
2、线程的并发工具类Fork-Join分支/聚合什么是分而治之?规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解动态规范工作密取workStealingFork/Join使用的标准范式ForkJoinPool类 invokeAll递交任务 常用的...原创 2019-03-17 11:24:09 · 344 阅读 · 1 评论 -
并发 JVM-JMM和底层实现原理
目录并发编程领域的关键问题... 1现代计算机物理上的内存模型... 2Java内存模型(JMM)... 2JVM对Java内存模型的实现... 3Java内存模型带来的问题... 3可见性问题... 3重排序... 4Java内存模型中的重排序... 4重排序类型... 4重排序与依赖性... 4数据依赖性... 4控制依赖性... 5as-i...原创 2019-03-25 22:44:43 · 703 阅读 · 0 评论 -
并发-线程基础、线程共享和协作
线程基础、线程之间的共享和协作单词:interrupt 打断;阻止;截断;中断;打扰;暂停;妨碍resume 继续;重新开始suspend暂停;悬;挂;延缓yield 放弃;退让;notify 通知;布告基础概念:CPU核心数和线程数的关系:核心数:线程数=1:1 ;使用了超线程技术后---> 1:2CPU时间片轮转机制:又称...原创 2019-03-16 19:49:11 · 452 阅读 · 1 评论 -
并发-显示锁Lock和独占锁AQS(AbstractQueuedSynchronizer)
4、显式锁和AQS显式锁Lock接口和核心方法lock():添加锁unlock():释放锁trylock():这个方法确保了在需要锁的时候,是未加锁的状态。返回true,表示是未加锁的,返回false表示已加锁Lock接口和synchronized的比较:synchronized关键字语言层面,调用cpu指令实现,lock由类在语法层面(类级别)synchro...原创 2019-03-21 16:42:23 · 452 阅读 · 1 评论 -
并发-原子操作和CAS(CompareAndSwep)
原子操作和CAS前言 (在jvm中创建对象(new对象时)先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个类的符号是否被加载、解析和初始化过,没有先执行相应的类加载,对象创建jvm中是非常频繁的行为,仅仅是修改一个指针所指向的位置,在并发情况下也并不是线程安全的,可能出现正在给对象A分配内存,指针还没来得及修改,对象B又同时使用原来的指针来分配内存。...原创 2019-03-19 20:27:08 · 517 阅读 · 0 评论 -
并发编程 Java并发机制的底层实现原理
volatile原理volatile是轻量级的synchronized,在多处理器开发中保证了共享变量的"可见性",volatile是一个轻量级的synchronized,在多CPU开发中保证了共享变量的“可见性”,也就是说当一个线程修改一个共享变量的时候,另一个线程能够读取到所修改的值。如果volatile使用恰当的话,它将比synchronized的使用和执行成本更低,不会引起上下文的切...原创 2019-07-31 21:50:13 · 713 阅读 · 1 评论 -
并发-ConcurrentHashMap容器、ConcurrentSkipListMap 和 ConcurrentSkipListSet并发容器
目录ConcurrentHashMap. 2预备知识... 2Hash. 2位运算... 21.7中原理和实现... 3ConcurrentHashMap中的数据结构... 3初始化做了什么事?... 4在get和put操作中,是如何快速定位元素放在哪个位置的?... 5get()方法... 6put()方法... 6扩容操作... 7size方法....原创 2019-03-22 20:48:20 · 5637 阅读 · 0 评论 -
【函数式编程实战】(六) Stream高并发实战
这讲为Stream高并发(并发、并行、多线程)、ForkJoin线程池框架的实战原创 2022-07-20 07:30:00 · 2766 阅读 · 20 评论