随笔分类 - 源码分析
摘要:Libco Hook 机制浅析 之前的文章里我们提到过 Libco 有一套 Hook 机制,可以通过协程的让出(yield)原语将系统的阻塞系统调用改造为非阻塞的,这篇文章我们将深入解析 Hook 机制到底是怎么运作的 Hook 机制的核心有两点 提供自己的实现覆盖标准库(libc.so)的实现 在
阅读全文
摘要:LevelDB 学习笔记5:版本控制 由于压缩是在后台线程异步进行的,所以会出现新老 sstable 同时存在的状态 但合并完成后,老的 sstable 并不能直接删除,必须等到没有人引用它们,才可以删除 因此数据库可能同时存在多个 Version,它们的集合是 VersionSet 所有的 ver
阅读全文
摘要:LevelDB 学习笔记4:读写 部分内容参考 LevelDB Handbook 写操作 写操作分为两步 先写日志 可以防止宕机时内存数据的丢失 但如果是异步写,日志可能没有落盘,而是在操作系统的缓存里,如果操作系统宕机,就会丢失这些日志 再写到内存数据库中 LevelDB 提供两种写操作 Stat
阅读全文
摘要:LevelDB 学习笔记3:合并策略 LSM 树常见的合并策略有两种: Leveled Compaction 和 Size-tiered Leveled Compaction LevelDB 和 Rocksdb 选择的合并策略叫 Leveled Compaction 每个 level 是有序的 ss
阅读全文
摘要:LevelDB 学习笔记2:合并 部分图片来自 RocksDB 文档 LevelDB 中会发生两种不同的合并行为,分别称为 minor compaction 和 major compaction Minor Compaction 将内存数据库刷到硬盘的过程称为 minor compaction 产出
阅读全文
摘要:LevelDB 学习笔记1:布隆过滤器 底层是位数组,初始都是 0 插入时,用 k 个哈希函数对插入的数字做哈希,并用位数组长度取余,将对应位置 1 查找时,做同样的哈希操作,查看这些位的值 如果所有位都是 1,说明数字可能存在 如果有某个位不是 1,说明数字一定不存在 数学结论 影响布隆过滤器精度
阅读全文
摘要:Libco 源码分析 设计目标 libco 的设计目标是对现有同步代码做异步化改造,但完全重写为异步的代码基本需要将所有代码重写,工作量太大 libco 的做法是采用 Linux 下的 hook 机制,将 glibc 的阻塞系统调用捕获,将它的底层逻辑改为异步的,以实现代码的无缝迁移 协程设计 什么
阅读全文