0%

标题起得有点唬人,但问题出自公司内的一个陈年老bug,表象是"atomic 不原子"。根本原因是在给原子变量分配内存时出现了跨cacheline分配。具体见下面的例子:

阅读全文 »

背景·

公司内项目为了提升性能,做的其中一个优化是上了协程+io uring。 我们选择的协程库为 腾讯开源的flare。 本文分析flare的fiber是如何做上下文切换的,即用户态的context switch。

在flare中,一个用户态线程命名为fiber,所以本文也即分析fiber是如何做context switch的。

阅读全文 »

RDB 是redis持久化方式的一种。 本文介绍其实现原理,内容包括:

  • redis 保存 RDB和 加载RDB的方式,SAVE和BGSAVE的实现原理
  • RDB自动保存原理
  • RDB文件的组成部分
阅读全文 »

最近在给公司项目做编译优化,因为编译时间实在是太长了,导致合代码ci效率太低。本文主要是给整改中遇到的一个坑的总结。考虑以下编译case:

image-20240630093909145

其中 liba, libb, libc 均可能是static lib , shared lib。不同的排列组合,可以有不同的结果。有些导致无法编译,有些可以编译但是不能运行。

阅读全文 »

前言·

上文中介绍了redis内部的各个数据结构,由于ziplist 是为节约内存而设计,个人t比较感兴趣,本篇详细分析其源码。

阅读全文 »

0. 前言·

几年前分析过持久化KV数据库–LevelDB, 从今天开始,逐渐分析内存KV数据库–Redis。实际上也是《Redis设计与实现》的读书笔记。

本篇为redis内常用基本数据结构介绍。

阅读全文 »

1. 前言·

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

阅读全文 »

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

阅读全文 »