****
队列同步器的作用 在多线程应用中,关键在于对状态依赖的管理以及对线程状态的管理。 因为资源不是无限的,如I/O资源、内存资源、CPU资源等,需要对线程进行控制,获取不到资源的线程需要进行阻塞或者挂起,这就引入了队列同步器中的一个关键属性:队列,获取不到资源的线程需要阻塞,然后在队列中等待唤醒。 状态依赖管理 对于加锁有前验的条件验证,也就是状态依赖。如:一个阻塞队列,put的时候队列不能为满,get的时候队列不......
本地事务高效实现 事务需要处理以下情况 未提交事务,写入后崩溃 已提交事务,写入后崩溃 事务实现方式 提前写入技术(Write-Ahead Logging) 写入raw data的时机: 在写commit record之前就写raw data**(steal)** 在写commit record时**(force)** 在写commit record之后才写raw data。(no-force) rec......
Mysql底层——InnoDB记录结构 页 默认 16K 大小一页,每页至少两条记录 名词说明: W : 某个字符集中单字符的最大字节 M : 某个数据类型能存储的最大字符 L : 实际存储的字节数,最大等于 W * M 行格式 四种行格式:Compact、Redundant、Dynamic(默认)、Compressed Dynamic: 与 Compact 的区别在于溢出页,会将溢出的字段整个放入 溢出页 ,......
JVM垃圾回收器G1和CMS 因为在学习JVM的垃圾回收器的过程中,发现CMS这个垃圾回收器在JDK版本中几乎没有出场,取而代之的是类似于CMS的G1收集器,这篇笔记记录下这两者的异同,以及CMS退居幕后的原因。 CMS收集器 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。这是因为CMS收集器工作时,GC工作线程与用户线程可以并发执行,以此来达到降低收集停......
【2022.5.28】Redis源码 字符串源码 字符串由两个部分组成,一个是redis对象通用结构体 RedisObject ,一个是字符串特有的 SDS(Simple Dynamic String) 简单动态字符串结构体 123456789//RedisObject 16Bytesstruct RedisObject{ int4 type; //对象类型,如字符串 4bits int4 encod......
线程IO模型 阻塞型IO 在调用socket的读写方法时候,在阻塞的情况下,开始写入/读取后,除非结束不然会阻塞线程。 非阻塞型IO 非阻塞IO就是能读多少就读多少,能写多少就写多少,能读多少取决于内核为套接字分配的 读缓冲区 的字节数,能写多少取决于内核为套接字分配的 写缓冲区 的空闲空间字节数。读写完成后,直接返回,线程可以做其他事情,等待下一次读写。 事件轮询(多路复用) 在处理完其他逻辑后,需要重新读写......
RESP(Redis Serialization Protocal)Redis序列化协议 Redis在客户端与服务端的通信中,使用的是 RESP 协议,这个协议虽然对消息体体积没有进行优化,但是容易解析,解析性能很好 RESP 把消息分为5种最小单元类型,单元结束时加上 \r\n + :单行字符串 $ :多行字符串 : :整数 - :错误信息 * :数组,可以嵌套其他类型单元 ...
线程池 Executor框架 基于Executor框架,通过消费者-生产者模式,把任务的提交和执行分离。 123public interface Executor { void execute(Runnable command);} 在Execute框架中,线程不是执行主要的抽象,任务才是。 执行策略 在什么线程中执行任务 任务按照什么顺序执行(FIFO、LIFO、优先级) 有多少个......
Lock Lock接口的实现必须提供和内置锁相同的内存可见性语义,但在加锁语义、调度算法、顺序保证和性能上可以不同。 ReentrantLock ReentrantLock 实现了与 synchronized 相同的可重入锁实现,并且在 java1.6 之后性能相差无几。对比 synchronized ,ReentrantLock 实现了可定时、可轮询、可中断的获取锁操作。 注意点:使用 ReentrantLo......
LRU(least recently used) LRU算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 具体过程 新数据插入到链表头部; 每当缓存命中(即缓存数据被访问),则将数据移到链表头部; 当链表满的时候,将链表尾部的数据丢弃。 数据结构 HashMap:快速搜索的基础 双向链表:LRU顺序的基础 简单实现 根据定义手敲了一个,可能不......