- 博客(10)
- 收藏
- 关注
原创 MySQL事务隔离级别与锁机制
通常我们的数据库操作中都会并发执行多个事务,当多个事务对数据进行增删改查操作时,可能会出现我们常说的脏读、幻读、不可重复读等问题。为了解决这些因为数据库多事务并行所导致的问题,MySQL设计了事务隔离机制、MVCC( 多版本并发控制)隔离机制,接下来让我们深入理解一下这些机制以及执行原理。
2025-03-26 01:06:11
445
原创 RocketMQ部分核心源码
这里的平均分配算法,类似于分页的算法,将所有MessageQueue排好序类似于记录,将所有消费端Consumer排好序类似页数,并求出每一页需要包含的平均size和每个页面记录的范围range,最后遍历整个range而计算出当前Consumer端应该分配到的记录(这里即为:MessageQueue)。我们从NameServer和Broker的启动过程中,发现都有通讯组件的注册和启动,例如Broker初始化时的RemotingServer。并且对这些不活跃的Broker又是怎么处理的呢?
2025-03-12 00:23:03
933
原创 RocketMQ功能解析
这个过程是在操作系统完成的,在Java代码层是无法直观看到的,我们可以通过看JDK源码,在JDK的nio包里,java.nio.HeapByteBuffer映射的就是一块JVM内存(会通过byte[]数组缓存数据),所有的读写都是通过直接操作byte[],这个是没有使用零拷贝的普通读写。上面cpu copy每次复制的都是存储的文件内容的copy,而mmap的copy只是保存文件的映射(文件的内存地址、文件大小),所以真实的数据也不需要在用户态进行留存,直接通过操作映射在内核态完成数据复制。
2024-05-04 01:30:26
1699
原创 ThreadLocal介绍以及源码分析
ThreadLocal是为了解决多线程并发访问的一种方案,它不像Synchronized等其他锁方式,使变量或者代码只能被一个线程访问,而ThreadLocal是为了每个线程提供属于自己线程的变量副本,每个线程读取变量副本都是相互独立的,从而达到线程隔离作用。
2024-04-24 18:25:33
1742
原创 AQS介绍和源码解析
AQS(AbstractQueuedSynchronizer),是Java中并发包的核心组件之一,它提供了一种队列同步器的实现方式。我们并发包中经常使用的,例如ReentrantLock、CountDownLatch、Semaphore等都是通过AQS来构建实现的。它的内部是使用一个FIFO等待队列来管理线程的获取和释放锁的顺序,同时使用一个volatile变量来标识锁的状态。AQS我们可以通过继承来进行扩展,但是我们要记得实现tryAcquire和tryRelease等方法来控制锁的获取和释放。
2024-04-23 15:42:23
1812
1
原创 线程池介绍以及ThreadPoolExecutor源码解析
文章目录前言1、线程池是什么?2、线程池的基本信息介绍2.1 核心参数2.2 线程池状态:3、ThreadPoolExecutor3.1 使用线程池的简单demo3.3 源码解析3.3.1 excute方法源码分析3.3.2 addWorker添加线程方法源码分析3.3.3 runWorker执行任务方法源码分析3.3.4 getTask获取任务方法源码分析3.3.5 processWorkerExit方法源码分析3.3.6 mainLock4、使用注意事项总结前言随着我们工作经验的提升,以及业务
2024-04-20 18:41:55
632
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人