2014年7月3日

mmap 与 read/write

摘要: mmap与read/write两条路线对文件的访问比较 我们知道无论是通过mmap或read/write访问文件在内核中都必须经过缓存, 当需要从文件读写内容时,都经过内存拷贝的方式与内核中的缓存进行通讯。 1. 用read/write方式,用户须向内核指定要读多少,内核再把得到的内容从内核缓存拷向用户空间;写也须要有一个大致如此的过程。 2. mmap的作用是通过把文件的某... 阅读全文

posted @ 2014-07-03 20:26 tgates 阅读(620) 评论(0) 推荐(0) 编辑

linux 同步IO: sync msync、fsync、fdatasync与 fflush

摘要: 最近阅读leveldb源码,作为一个保证可靠性的kv数据库其数据与磁盘的交互可谓是极其关键,其中涉及到了不少内存和磁盘同步的操作和策略。为了加深理解,从网上整理了linux池畔同步IO相关的函数,这里做一个罗列和对比。大部分为copy,仅为记录,请各位看官勿喷。 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到... 阅读全文

posted @ 2014-07-03 20:22 tgates 阅读(4806) 评论(0) 推荐(1) 编辑

LevelDB源码分析--使用Iterator简化代码设计

摘要: 我们先来参考来至使用Iterator简化代码2-TwoLevelIterator的例子,略微修改希望能帮助更加容易立即,如果有不理解请各位看客阅读原文。下面我们再来看一个例子,我们为一个书店写程序,书店里有许多书Book,每个书架(BookShelf)上有多本书。类结构如下所示class Book ... 阅读全文

posted @ 2014-07-03 20:01 tgates 阅读(1721) 评论(0) 推荐(0) 编辑

LevelDB源码分析--Cache及Get查找流程

摘要: 本打算接下来分析version相关的概念,但是在准备的过程中看到了VersionSet的table_cache_这个变量才想起还有这样一个模块尚未分析,经过权衡觉得leveldb的version相对Cache来说相对复杂,而且version虽然对整个leveldb来说实现上跟其他功能十分紧密,但是从... 阅读全文

posted @ 2014-07-03 19:21 tgates 阅读(1576) 评论(0) 推荐(0) 编辑

导航