LevelDB源码分析12-Compaction(2) Compaction上一篇介绍了Compaction的一些基本概念和原理,这一篇,我们开始研究Compaction中的代码,力求清楚代码中的细节。 Minor CompactionMinor Compaction主要通过DBImpl::CompactionMemTable方法实现: CompactionMemTable方法首先调用DBImpl::WriteLevel0Table方法将Immutab 2024-02-26 数据库 > LevelDB源码分析 #数据库 #LevelDB源码分析
LevelDB源码分析1-总体介绍 总体介绍LSM-TreeLog Structured Merge Tree,简称 LSM-Tree。LSM-Tree 通过将磁盘的随机写转化为顺序写来提高写性能 ,而付出的代价就是牺牲部分读性能、写放大。 如何优化写性能?Append only:所有写操作都是将数据添加到文件末尾。缺点是不支持有序遍历、需要垃圾回收 ** 如何优化读性能**有序和哈希 读写性能的权衡如何获得接近 append on 2024-02-26 数据库 > LevelDB源码分析 #数据库 #LevelDB源码分析
LevelDB源码分析10-Cache ** Leveldb中的缓存机制**这篇文章将讲解LevelDB缓存模块的相关内容,本文内容比较简单,读者只需按照顺序阅读即可。 leveldb中的缓存分为两种: sstable的table_cache_ (类DBImpl 中) Block的block_cache_ (可选,在options 中) sstable的Cache就是缓存(Key:file_number Value:Table 2024-02-26 数据库 > LevelDB源码分析 #数据库 #LevelDB源码分析
LevelDB源码分析11-Compaction(1) Compaction 的作用因为 LevelDB 的增删改都是通过追加写来实现的,所以需要通过后台线程的 compaction 来: 清理过期(旧版本或者已删除)的数据。 维护数据的有序性。 Compaction 的触发除了从外部调用 CompactRange,LevelDB 有几种情况会自动触发 compaction: 当 MemTable 的大小达到阈值时,进行 MemTable 切换, 2024-02-26 数据库 > LevelDB源码分析 #数据库 #LevelDB源码分析
Transformation变换(1)1.基础变换引入齐次坐标,对于二维平面:点 (x, y) ,其齐次坐标为:(x, y ,1)向量(x, y),其齐次坐标为:(x, y, 0)可以保证加减性质不变: 想一想:点 + 点表示的是上面: 表示的是两个点连线的中点、 1.1 缩放 1.2旋转 1.3平移 1.4仿射变换仿射变换 = 线性变换 + 平移变换 1.5复合变换多个简 2024-01-26
同步:信号量 本讲内容:另一种共享内存系统中常用的同步方法:信号量 什么是信号量 信号量适合解决什么问题 哲 ♂ 学家吃饭问题 什么是信号量在操作系统中,信号量就是一个变量(可以是整数或复杂的记录型变量),用来表示系统中某种资源的数量。 Linux中的信号量 P操作:尝试在盒子中拿一个球,若盒子中没有球,则睡眠;否则就可以进入临界区。 V操作:尝试在盒子中放入一个球,若盒子已满,则睡眠;放入成功后,可唤醒在这 2023-11-11 操作系统 > jyy操作系统 #jyy操作系统 #操作系统
同步:生产者-消费者与条件变量 同步两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。 再次把线程想象成自己 NPY:等我洗个头就出门/等我打完这局游戏就来 舍友:等我修好这个 bug 就吃饭 导师:等我出差回来就讨论这个课题“先到先等”,在条件达成的瞬间再次恢复并行同时开始出去玩/吃饭/讨论 生产者-消费者问题99% 的实际并发问题都可以用生产者-消费者解决。 12void Tpro 2023-11-11 操作系统 > jyy操作系统 #jyy操作系统 #操作系统
并发控制基础 Peterson算法在介绍Peterson算法之前,我们首先对我们作出以下基本假设:内存的读/写可以保证顺序、原子地完成。 Peterson算法:A 和 B 争用厕所的包厢 想进入包厢之前,A/B 都首先举起自己的旗子 A 往厕所门上贴上 “B 正在使用” 的标签 B 往厕所门上贴上 “A 正在使用” 的标签 然后,如果对方举着旗,且门上的名字是对方,等待 否则可以进入包 2023-11-11 操作系统 > jyy操作系统 #jyy操作系统 #操作系统
并发Bug的应对 本讲内容:一节真正的 “编程 ”课:如何正确地 (并发) 编程: Lock ordering 防御性编程 运行时检查 Lock ordering 任意时刻系统中的锁都是有限的 严格按照固定的顺序获得所有锁 (Lock Ordering),就可以消灭循环等待 “在任意时刻获得 “最靠后” 锁的线程总是可以继续执行”也就是为所有的锁固定一个顺序,某个线程想要获取某种资源就要按顺序去获得这些锁,这样就 2023-11-11 操作系统 > jyy操作系统 #jyy操作系统 #操作系统
CS144-lab1 实验目的 背景介绍在这个实验中和下一个实验中,我们需要实现TCP receiver。它接收数据报,把它们转成可靠的字节流,以供socket读取。TCP sender把字节流分成不同的segments,每个segment都封装成数据报。但是网络传送可能会丢失,重复或失序,这就需要TCP receiver重新组合,还原最初的字节流。 实验目的完成一个数据结构StreamReassembler。它接收一 2023-09-13 计算机网络 > CS144 #计算机网络 #CS144