Acquire and Release Semantics

SEP 13, 2012 http://preshing.com/20120913/acquire-and-release-semantics/ 通常说来,在lock-free编程中,线程之间有两种方式可以操作共享内存:它们可以竞争同一个资源,或者相互协作的从一个向另一个传递信息。Acquire and Release语义对后者是至关重要的:在线程之间可靠的传输信息。事实上,我冒昧...
阅读(706) 评论(0)

The Happens-Before Relation

JUL 02, 2013 http://preshing.com/20130702/the-happens-before-relation/ Happens-before是一个现代计算机科学术语,对于描述C++11,Java,Go甚至LLVM之后的software memory model是有帮助的。 你可以在上面的每一种语言规范中找到happens-before关系的定义。这些...
阅读(449) 评论(0)

This Is Why They Call It a Weakly-Ordered CPU

OCT 19, 2012 http://preshing.com/20121019/this-is-why-they-call-it-a-weakly-ordered-cpu/ 注:对于理解weak cpu下的reordering而言,这真是一篇相当好的文章。拿起你的xcode和4s,可以直接测试运行作者的例子。没什么比鲜活的例子更令人印象深刻。 还有就是,除了在iphone 3GS...
阅读(470) 评论(0)

Weak vs. Strong Memory Models

SEP 30, 2012 http://preshing.com/20120930/weak-vs-strong-memory-models/...
阅读(528) 评论(0)

Memory Barriers Are Like Source Control Operations

前言:第三篇,老外想象力挺丰富,和代码版本控制联系起来,确实可以帮助人比较直观的理解Memory Barrier。 JUL 10, 2012 http://preshing.com/20120710/memory-barriers-are-like-source-control-operations/ 正文开始——> 如果你使用过版本控制工具,你就向着理解memory ordering又...
阅读(632) 评论(0)

Memory Ordering at Compile Time

JUN 25, 2012 原文在这:http://preshing.com/20120625/memory-ordering-at-compile-time/ 前言:这是译自preshing博客的第二篇文章,本文讨论的是编译优化导致的重排序问题。从你写C/C++源代码到它在CPU里执行,这段代码的内存交互可能会根据特定的规则被重新排序了。编译器(编译期)和processor(运行期)都有可能导致...
阅读(753) 评论(0)

Memory Ordering in Intel Family

前言:这篇文章是翻译自的Intel x86/64的规范文档,其中第8.2节中有关Memory Ordering的几段。整个文档是一本巨书,这里可以download:http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-system-pr...
阅读(640) 评论(0)

Memory Reordering Caught in Act

前言: 首先是翻译的几篇文章,作者是一个老外,虽然文章是几年前的,但是很值得一读。 最近不知道写些什么东西,拿这个先凑几篇其次有关什么memory ordering,memory reordering,memory model这些名词,可能很多时候直接e文,没有翻译,个人习惯。Memory Reording Caught in Act原文在这里:http://preshing.com/20120...
阅读(604) 评论(0)

初见Raft

这几天研究了一下Raft协议,继Paxos之后出来的第二个可以理论证明自己正确性的分布式一致性协议(可以这么说吧,没仔细了解过其它协议)。 其实看过paxos,初看Raft,感觉还是有很多熟悉的面孔,仔细看作者的描述,确实两者也有不少差别。 我觉得basic paxos好像也没有Ongaro说的那么难以理解吧,不过有一点是肯定的,paxos给出了理论,但是距离一个基本可用的工程实践确实还有很远...
阅读(3114) 评论(2)

个人数据搜索

有时间再仔细讲讲。...
阅读(2553) 评论(0)

从MySQL Bug#67718浅谈B+树索引的分裂优化

原文链接:http://hedengcheng.com/?p=525...
阅读(3475) 评论(0)

Leveldb源码分析--22

14 DB的查询与遍历之214.4 DBIterLeveldb数据库的MemTable和sstable文件的存储格式都是(user key, seq, type) => uservalue。DBIter把同一个userkey在DB中的多条记录合并为一条,综合考虑了userkey的序号、删除标记、和写覆盖等等因素。从前面函数NewIterator的代码还能看到,DBIter内部使用了MergingI...
阅读(7602) 评论(7)

Leveldb源码分析--21

最近工作上事情太多,更新的也比较慢了。14 DB的查询与遍历分析完如何打开和关闭db,本章就继续分析如何从db中根据key查询value,以及遍历整个db。14.1 Get()函数声明:StatusGet(const ReadOptions& options, const Slice& key, std::string* value)从DB中查询key 对应的value,参数@options指定读...
阅读(6295) 评论(7)

Leveldb源码分析--20

12 DB的打开先分析LevelDB是如何打开db的,万物始于创建。在打开流程中有几个辅助函数:DBImpl(),DBImpl::Recover, DBImpl::DeleteObsoleteFiles, DBImpl::RecoverLogFile, DBImpl::MaybeScheduleCompaction。12.1 DB::Open()打开一个db,进行PUT、GET操作,就是前面的静态...
阅读(7153) 评论(2)

Leveldb源码分析--19

11 VersionSet分析之211.4 LogAndApply()函数声明:Status LogAndApply(VersionEdit*edit, port::Mutex* mu)前面接口小节中讲过其功能:在currentversion上应用指定的VersionEdit,生成新的MANIFEST信息,保存到磁盘上,并用作current version,故为Log And Apply。参数ed...
阅读(4943) 评论(0)

Leveldb源码分析--18

11 VersionSet分析之1Version之后就是VersionSet,它并不是Version的简单集合,还肩负了不少的处理逻辑。这里的分析不涉及到compaction相关的部分,这部分会单独分析。包括log等各种编号计数器,compaction点的管理等等。11.1 VersionSet接口1 首先是构造函数,VersionSet会使用到TableCache,这个是调用者传入的。Table...
阅读(5397) 评论(0)

Leveldb源码分析--17

10 Version分析之210.5 Version::UpdateStats()当Get操作直接搜寻memtable没有命中时,就需要调用Version::Get()函数从磁盘load数据文件并查找。如果此次Get不止seek了一个文件,就记录第一个文件到stat并返回。其后leveldb就会调用UpdateStats(stat)。Stat表明在指定key range查找key时,都要先seek...
阅读(5335) 评论(3)

Leveldb源码分析--16

10 Version分析之1先来分析leveldb对单版本的sstable文件管理,主要集中在Version类中。前面的10.4节已经说明了Version类的功能和成员,这里分析其函数接口和代码实现。Version不会修改其管理的sstable文件,只有读取操作。10.1 Version接口先来看看Version类的接口函数,接下来再一一分析。  // 追加一系列iterator到 @*ite...
阅读(5933) 评论(0)

Leveldb源码分析--15

9 LevelDB框架之29.4 版本控制当执行一次compaction后,Leveldb将在当前版本基础上创建一个新版本,当前版本就变成了历史版本。还有,如果你创建了一个Iterator,那么该Iterator所依附的版本将不会被leveldb删除。在leveldb中,Version就代表了一个版本,它包括当前磁盘及内存中的所有文件信息。在所有的version中,只有一个是CURRENT。Ver...
阅读(9330) 评论(0)

Leveldb源码分析--14

9 LevelDB框架之1到此为止,基本上Leveldb的主要功能组件都已经分析完了,下面就是把它们组合在一起,形成一个高性能的k/v存储系统。这就是leveldb::DB类。这里先看一下LevelDB的导出接口和涉及的类,后面将依次以接口分析的方式展开。而实际上leveldb::DB只是一个接口类,真正的实现和框架类是DBImpl这个类,正是它集合了上面的各种组件。此外,还有Leveldb对版本...
阅读(7554) 评论(0)
118条 共6页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:1330828次
    • 积分:10044
    • 等级:
    • 排名:第1645名
    • 原创:88篇
    • 转载:16篇
    • 译文:12篇
    • 评论:645条
    最新评论