并发编程——ConcurrentHashMap#transfer() 扩容逐行分析 前言 ConcurrentHashMap 是并发中的重中之重,也是最常用的数据结构,之前的文章中,我们介绍了 putVal 方法.并发编程之 ConcurrentHashMap(JDK 1.8) putVal 源码分析.其中分析了 initTable 方法和 putVal 方法,但也留下了一句话: 这篇文章仅仅是 ConcurrentHashMap 的开头,关于 ConcurrentHashMap 里面的精华太多…
决定从这篇文章开始,开一个读源码系列,不限制平台语言或工具,任何自己感兴趣的都会写.前几天碰到一个小问题又读了一遍ConcurrentQueue的源码,那就拿C#中比较常用的并发队列ConcurrentQueue作为开篇来聊一聊它的实现原理. 话不多说,直奔主题. 要提前说明下的是,本文解析的源码是基于.NET Framework 4.8版本,地址是:https://referencesource.microsoft.com/#mscorlib/system/Collections/Concur…
前言 ReentrantLock 可重入锁,应该是除了 synchronized 关键字外用的最多的线程同步手段了,虽然JVM维护者疯狂优化 synchronized 使其已经拥有了很好的性能.但 ReentrantLock 仍有其存在价值,例如可以感知线程中断,公平锁模式,可以指定超时时间的抢锁等更细粒度的控制都是目前的 synchronized 做不到的. 如果不是很了解 Java 中线程的一些基本概念,可以看之前这篇: Java读源码之Thread 案例 用一个最简单的案例引出我们的主角…
前言 本文是 ReentrantLock 源码的第二篇,第一篇主要介绍了公平锁非公平锁正常的加锁解锁流程,虽然表达能力有限不知道有没有讲清楚,本着不太监的原则,本文填补下第一篇中挖的坑. Java读源码之ReentrantLock 源码分析 感知中断锁 如果我们希望检测到中断后能立刻抛出异常就用 lockInterruptibly 方法去加锁,还是建议用 lock 方法,自定义中断处理,更灵活一点. ReentrantLock#lockInterruptibly 我们只需要把 Reentrant…
前言 相信大家都挺熟悉 CountDownLatch 的,顾名思义就是一个栅栏,其主要作用是多线程环境下,让多个线程在栅栏门口等待,所有线程到齐后,栅栏打开程序继续执行. 案例 用一个最简单的案例引出我们的主角 public class CountDownLatchDemo { public void run(CountDownLatch countDownLatch) { System.out.println(Thread.currentThread().getName() + "就位&quo…
作为一个程序员,经常需要读一些开源项目的源码.同时呢,读源码对我们也有很多好处: 1.提升自己 阅读优秀的代码,第一可以提升我们自身的编码水平,第二可以开拓我们写代码的思路,第三还可能让我们拿到大厂 offer.无论那种情况,优秀的代码就是提升我们开发水平的资粮,而把这些优秀的代码读懂.读透并不很容易. 2.修复 Bug 有些时候,我们用的一些开源组件,出现了一些预想不到的问题.而这时候,也没有前人经验可借鉴,也没有文档可供参考,只能靠自己修复.阅读代码,理解项目,才能顺利修复问题.如果阅读代码…
✿ 需要掌握的编译器知识 ★ 编译器为eclipse为例子 调试准备工作(步骤:Window -> Show View ->...): □ 打开调试断点Breakpoint: □ 打开变量监视: 要看一个方法的内部细节,按f5,进入 要快速跳到某个位置[在目标位置上打个断点],然后按f8 观察方法的细节(执行流程),一步一步走,按f6 去除掉所有断点(编译器是eclipse) □ 注意看开始标记的执行位置对不对 f5调试的方式进入[若进入的是不相干的,按f7返回,再按f5进入一次] 举例: U…
QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到exec()函数内部,来看一下他的实现原理.Let's go!首先来到QTDIR\src\corelib\kernel\qcoreapplication.cpp int QCoreApplication::exec() { if (!QCoreApplicationPrivate::checkInsta…
kernel 3.10内核源码分析--hung task机制 一.相关知识: 长期以来,处于D状态(TASK_UNINTERRUPTIBLE状态)的进程 都是让人比较烦恼的问题,处于D状态的进程不能接收信号,kill不掉.在一些场景下,常见到进程长期处于D状态,用户对此无能为力,也不知道原因,只能重启恢复. 其实进程长期处于D状态肯定是不正常的,内核中设计D状态的目的是为了让进程等待IO完成,正常情况下IO应该会顺利完成,然后唤醒相应的D状态进程,即使在异常情况下(比如磁盘离或损坏.磁阵链路断开…
Fabric 1.4源码分析 kafka共识机制 本文档主要介绍kafka共识机制流程.在查看文档之前可以先阅览raft共识流程以及orderer服务启动流程. 1. kafka 简介 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统,一种高吞吐量的分布式发布订阅消息系统.kafka详细介绍可以参考这一篇博客.kafka介绍 2. kafka共识 kafka共识当中,每个orderer节点即是生产者Producer也…