leveldb线程模型
概述
- leveldb支持一个进程中多线程访问
- leveldb会启动一个后端线程进行compact操作
- 涉及的竟态访问资源,memtable,sstable,manifest,各种文件的生成和删除
写操作
- 通过写队列的方式,只允许一个线程进行写操作
- 并且在写log和memtable会进行unlock,其他时候都是加了锁的
读操作
- 读操作运行多个线程同时进行
- 读操作开始时会进行上锁,并复制mem_/imem_/current_version并增加引用, 防止其他线程释放mem或者删除sstable文件
- 再从mem_/imem_/current_version读取数据时会进行unlock,mem的底层实现是SkipList,允许读写并发
compact操作
- compact操作全程都会上锁,除了耗时操作: BuildTable, 遍历compact任务中的key进行compact

浙公网安备 33010602011771号