摘要:
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,说明数字一定不存在 数学结论 影响布隆过滤器精度 阅读全文
摘要:
CMake 从入门到崩溃5 - 基础语法之模块 CMake 内置一套标准模块 ,可以分为两类 工具类模块 通过 include() 命令使用 Find 模块 即 Find*.cmake 使用它们你可以方便的找到系统上安装的第三方库 通过 find_package 命令使用 通过 include 使用 阅读全文
摘要:
CMake 从入门到崩溃4 - 基础语法之函数和宏 函数 function(<someName> [<arg1> ...]) <commands> endfunction() 🔑 CMake 函数名不区分大小写 函数可以接受两种参数:命名参数和可选参数,命名参数是强制性的,如果不提供,会抛异常 可 阅读全文
摘要:
CMake 从入门到崩溃3 - 基础语法之作用域 上一篇我们介绍了 CMake 变量的使用,在这篇里我们会讲解 CMake 是怎样做名字查找的,也就是 CMake 中的变量作用域,由于 CMake 的作用域和其他编程语言区别很大,因此理解 CMake 作用域机制对正确的写出 CMake 脚本帮助很大 阅读全文
摘要:
CMake 从入门到崩溃2 - 基础语法之CMake变量 CMake 中变量名大小写敏感,且可以由任何字符组成 🔑 最佳实践 仅在当前作用域中使用的本地变量用简短的小写命名,在多个作用域中使用的变量用详细的大写命名 变量评估 CMake 中变量都是“字符串化”的,用 ${} 包裹一个变量会用变量的 阅读全文