Masutangu

也許我這一生 始終在追逐那顆九號球

MIT 6.824 学习笔记(三)

本系列文章是对 MIT 6.824 课程的学习笔记。 Spinnaker Introduction Spinnaker is an experimental datastore that is designed to run on a large cluster of commodity servers in a single datacenter. This paper des...

MIT 6.824 学习笔记(二)

本系列文章是对 MIT 6.824 课程的学习笔记。 Raft Introduction Raft 是用于管理复制日志的一致性算法。为了方便理解,Raft 将一致性算法分解为几个关键模块:Leader 选举、日志复制和安全性,同时通过更强的一致性来减少需要考虑的状态。 一致性算法允许一组机器像一个整体一样工作,即使其中一些机器挂掉。一致性算法在构建大规模可信赖系统中扮演重要的角色。 ...

MIT 6.824 学习笔记(一)

本系列文章是对 MIT 6.824 课程的学习笔记。 Introduction 本课程涵盖以下主题: RPC、线程、并发控制 性能 容灾:Availability, Durability. replicated servers 是不错的选择。 一致性:replica如何保持一致? Consistency 和 Performance 不可兼得 MapReduce M...

游戏开发之状态机

这阵子工作的内容有用到状态机,感觉挺有意思。正好好久没写博客了,今天也来写一篇总结下。 前言 用状态机来实现业务模型,有以下几点好处: 不需要写一大坨 if-else 或 switch case。代码逻辑结构清晰,也更便于调试 代码阅读起来更加友好,方便其他读者理解整个业务逻辑 状态机可以划分为下面三个模块: 状态集:总共包括哪些状态 事件(条件):事件会触发...

LevelDB 源码阅读(一)

这篇文章主要记录 LevelDB 的重要模块、类以及方法。把读写操作和 Compaction 操作的代码串了一遍,并添加了小部分注释。 模块 Log 文件 客户端的写请求会先 append 到 Log 文件,成功后再写入到 Memtable。如果宕机可以通过 Log 文件来恢复 Memtable。 Memtable 和 Immutable Memtable 内存数据结构,基于跳表。...

链接和装载

本文是读《程序员的自我修养: 链接、装载与库》所整理的读书笔记。 概论 从源文件到可执行文件,可以分解为四个过程:预处理,编译,汇编,链接。 预处理主要完成以下工作: 展开所有宏定义,删除 #define 处理所有条件预编译指令 处理 #include 预编译指令。将被包含的文件插入到该预编译指令的位置 删除所有注释 添加行号和文件名标识,以便编译时编辑器产生调...

Linux 性能监控

本文是对 《Linux 性能监测》 系列文章的读书笔记,并在此基础上丰富。 CPU 相关 vmstat 1 2 3 4 5 6 $ vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si ...

我的 2016

时间飞逝,又到了写年终总结的时候了。翻回看去年的总结和展望,回想起去年的雄心壮志,今年则是坎坷、困惑与焦虑的一年。 回顾过去 在这整整一年中,我所思考的和困扰的,可以由三个词来概括:成绩、成长和价值。 工作已经两年半,对自己目前取得的成绩,对自己技术成长的预期,对自己为团队创造的价值,实话实说,都不满意。 从今年年初开始,我就有点焦虑,觉得自己没有太多的成长,一直在原地踏步,已经没有...

Linux 内核系列-文件系统和 IO

本系列文章为阅读《现代操作系统》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 如果能把文件看成是一种地址空间,那么就离理解文件不远了。(文件类似虚拟地址空间,相应的磁盘地址对应内存物理地址,通过 inode 来管理映射关系,类似页表的作用)。 文件系统的实现 文件系统存放在磁盘上。多数磁盘划分为一个或多个...

Linux 内核系列-内存管理

本系列文章为阅读《现代操作系统》和《Linux 内核设计与实现》所整理的读书笔记,源代码取自 Linux-kernel 2.6.34 版本并有做简化。 概念 操作系统存储管理方案的演进: 无存储抽象 早期计算机并没有存储抽象,程序直接访问物理内存地址。使用这种模型,想要同时运行多个程序非常困难。 存储抽象:地址空间 地址空间的概念 要保证多个应用程序同时处于内存并且互不影响,则...