Raven's Blog

zhang.xingrui@foxmail.com

0%

1. 前言·

一年多前做过mit 6824, 学习了raft,不过当时更多是从代码层面记录博文,最近正好在系统学习分布式的知识,本文从理论角度全面细谈Raft。

阅读全文 »

最近在读《深入理解分布式系统》,书中所描述的Multi-Paxos个人觉得不太好理解。本文结合书和网络上的资料,记录下Paxos的基本流程。

阅读全文 »

一直以来对"并发"相关的主题都蛮感兴趣的,但这一块也确实非常复杂,因为同时涉及了硬件设计和软件协议。比如再看c++ memory order时,一定见过这些词语:重排序、乱序执行,分支预测、预测执行、MSEI、volatile,内存屏障、store buffer, invalidate queue, sequential order(SC)、TSO、PSO内存模型、happens before, synchronized-with、sequenced-before、program order等等名词。作为一个非科班的开发人员,大概率是会被绕晕的。这篇文章,就来谈谈这些概念,当然最终目标是理解c++11中提出的几大常见内存序该如何使用。由于水平有限,难免出错,也希望指正。

阅读全文 »

本文首先分析 unique_ptr 的实现原理,介绍为什么其默认size仅为一个 raw pointer size; 接着分析了 shared_ptr 的实现原理,从两种构造方式入手,分析两种构造方式所带来的不同内存布局,最终通过分析shared_ptr的拷贝源码,简述了shared_ptr的线程安全性。

阅读全文 »

string是c++中标准的字符类(其实字节类更贴切),几乎所有项目都在使用(除非是明令禁止),了解其内部实现,可以帮我们更好的使用它。今天来分析下它。

本文分析的是 3.3 版本string,额外介绍了一些新版的实现。

阅读全文 »

这是stl源码阅读系列的第二篇,这一篇来看看stl中迭代器traits的实现。

在stl中,有三个彼此关联的组件:

stl容器-迭代器-算法关联

Containers(即我们常用的vector, list, deque等)装载数据结构,Algorithms装载数据操作,两者相互独立,Iterator作为中间人,将两者联系起来。iterator提供访问容器数据成员的接口,隐藏了每个容器的具体存储实现(即迭代器设计模式)。每个容量都会提供一份iterator实现,所以在分析容器前,先看看iterator。

另外,整个stl可以看做泛型编程的最佳实践,所以在本篇中也会介绍一些泛型(模板)编程的概念。

阅读全文 »