摘要: 先上结论: 一切互斥操作的依赖是 自旋锁(spin_lock),互斥量(semaphore)等其他需要队列的实现均需要自选锁保证临界区互斥访问。 而自旋锁需要xcmpchg等类似的可提供CAS操作的硬件指令提供原子性 和 可见性,(xcmpchg会锁总线或缓存行,一切会锁总线或缓存行的操作都会刷St 阅读全文
posted @ 2021-01-26 22:50 执生 阅读(662) 评论(1) 推荐(2) 编辑
摘要: 1.基础知识(了解栈结构) 先回顾一下关于栈的最简单知识; 本文主要涉及线性栈假如我们不考虑栈底,栈底是固定不动的,只考虑栈顶,那么栈就像一只放在桌子上的空杯,杯底固定贴在桌子上。而如果我们往这个杯子里放方糖,先放进去的方糖总是被后放进去的方糖压在下面,也就是说要先取出后放进去的方糖才能取出先放进去 阅读全文
posted @ 2019-11-04 09:20 执生 阅读(2133) 评论(0) 推荐(0) 编辑
摘要: 假设A是某缓存行的内容 CPU1 read A CPU2 read A CPU3 read A CPU 3 在寄存器中修改 A 中内容,并且写入写缓存区StoreBuffer,假设修改是 ++A(就是A现在等于 A +1,图里放不下,简写成++A) CPU1 和 上一步 CPU3 同样操作 总是得有 阅读全文
posted @ 2021-02-18 23:39 执生 阅读(416) 评论(1) 推荐(0) 编辑
摘要: 仅供参考,如有不妥之处,请多指正 在网上看到许多博客说 java 的 volatile 修饰的 double 和 long 在 32 位机上也是保证原子性的。 但是没有说明为什么,怎么具体实现,是使用互斥量吗,但是要访问的 volatile 修饰的 long,double 变量的地址是随机的,而且数 阅读全文
posted @ 2021-02-13 11:53 执生 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 问题场景: 假设用户A的账户余额是 100 现在有两个事务 a,b a 事务内容是 用户A消费 30 元 b 事物内容是 用户A消费 60 元 如果现在 a 和 b 互相不设防,无论 a 和 b 是什么事务隔离级别(除了序列化),最终结果都可能是错误的 模拟: 1. 读提交情况下,这种情况没有正确可 阅读全文
posted @ 2021-02-08 12:15 执生 阅读(697) 评论(0) 推荐(0) 编辑
摘要: 跳跃表能计算的条件是每层的索引节点的分布是均匀的。才能得出上一层两节点间 下一层有 K 个节点 也是为什么使用随机算法的原因了,要保证每层几乎均匀 索引节点需要的额外空间是 1 +...+ N / (K^2) + N / K。根据通项公式 1 * (1 - K ^(logk(N)) ) / ( 1 阅读全文
posted @ 2021-01-30 19:28 执生 阅读(967) 评论(0) 推荐(0) 编辑
摘要: Redis 的 RDB 后台 save ( BGsave ) 是使用了无参的 fork 的,所以会拷贝当前进程,也就是父进程的目录表和页面表 并且使用 COW 。值得注意的是 fork 之后,并没有调用 exec,所以子进程不需要另立门户,设置自己的新的,空的目录表和页面表。 而是用和父进程用有相同 阅读全文
posted @ 2021-01-28 13:02 执生 阅读(1177) 评论(0) 推荐(0) 编辑
摘要: 很简单,和有不是主键的列的格式一样。 实验:在 Mysql 8 中 创建一张主键包含全部列的表 插入 10000 条数据。 因为是字符串做为主键(为了好辨别),所以大小是按照字典序来的 使用工具查看叶子节点结构,下面是部分截图,剩下的部分都是 一样的 level 为0的数据页。 着重看索引叶。也就是 阅读全文
posted @ 2021-01-05 21:33 执生 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 订阅连接:订阅某个频道,频道有消息马上读取,一个频道上的消息会发给多个订阅者,所以是一发多收 命令连接:收发方 简单通过命令通信(udp?) Redis 主从: 某个 Redis 实例 A 通过 slaveof masterip masterport 指定要成为谁的从服务器 A 会连接到 目标主服务 阅读全文
posted @ 2020-12-12 21:47 执生 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 如果没有重叠,就会直接跳到开头 阅读全文
posted @ 2020-12-12 10:18 执生 阅读(209) 评论(0) 推荐(0) 编辑
摘要: Chunk HandlArea 等继承了 CheapObj 的类,都是需要重载 new,delete 等方法的,而这些new,delete方法,其实就是 平常C的 malloc (通过os::malloc)和 free(通过os::delete)方法 而JVM的Heap对象堆和上面的C堆是不同概念 阅读全文
posted @ 2020-12-11 09:47 执生 阅读(437) 评论(0) 推荐(0) 编辑