开源源码分析
good-destiny
这个作者很懒,什么都没留下…
展开
-
【muduo源码分析】Buffer类的设计
目录 1、muduo的IO模型 2、为什么 non-blocking 网络编程中应用层 buffer 是必须的? 2.1TcpConnection 必须要有 output buffer 2.2TcpConnection 必须要有 input buffer 3、Muduo Buffer 的数据结构 3.1 muduo buffer类设计 3.2 核心函数分析 4、参考 1...原创 2019-12-20 17:05:22 · 254 阅读 · 0 评论 -
【muduo源码分析】TcpServer服务架构
1、muduo整体类图 2、服务器TcpServer (1)TcpServer由用户直接使用,生命周期由用户控制,用户设置好相应的回调MessageCallback、ConnectionCallback传递给TcpServer即可;MessageCallback为连接上有接收数据时调用的回调(处理业务逻辑),这些数据存放在连接的应用层接收缓冲区中;ConnectionCallback在连...转载 2019-12-20 09:35:10 · 226 阅读 · 0 评论 -
【muduo源码分析 】 MutexLock和MutexLockGuard封装
MutexLock 封装临界区(critical section),这是一个简单的资源类,用RAII 手法[CCS,条款13] 封装互斥器的创建与销毁。临界区在Windows 上是struct CRITICAL_SECTION,是可重入的;在Linux 下是pthread_mutex_t,默认是不可重入的。MutexLock 一般是别的class 的数据成员。 Mut...原创 2019-03-28 00:12:17 · 632 阅读 · 0 评论 -
redis源码剖析(7):基础数据结构quicklist
目录 1、quicklist概述 2、quicklist源码分析 2.1 定义 2.2push操作 2.3 节点压缩 3、总结 1、quicklist概述 quicklist是一个3.2版本之后新增的基础数据结构,是redis自定义的一种复杂数据结构,将ziplist和adlist结合到了一个数据结构中。主要是作为list的基础数据结构。 在3.2之前,list是...转载 2019-12-03 18:42:10 · 170 阅读 · 0 评论 -
redis源码剖析(6):基础数据结构ziplist
目录 1、简介 2、数据存储 2.1 编码 2.2 结构体entry 3、基本操作 3.1 创建压缩列表 3.2 插入元素 3.3 删除元素 3.5 遍历压缩列表 4、连锁更新 5、总结 1、简介 压缩列表(ziplist)本质上就是一个字节数组,是Redis为了节约内存而设计的一种线性数据结构,可以包含任意多个元素,每个元素可以是一个字节数组或一个整数。 ...转载 2019-12-03 17:07:09 · 169 阅读 · 0 评论 -
redis源码剖析(5):基础数据结构inset
目录 1、intset概述 2、inset分析 2.1 定义 2.2 新增元素 2.3 升级 2.4 总结 1、intset概述 整数集合是redis对外数据结构set的底层实现之一,当集合元素不大于设定值并且元素都是整数时,就会用intset作为set的底层数据结构。 2、inset分析 2.1 定义 inset结构体定义如下: typedef ...转载 2019-12-03 16:34:33 · 404 阅读 · 0 评论 -
redis源码剖析(3):基础数据结构dict
目录 1、dict概述 2、字典的定义 3、哈希算法 4、字典的初始化及新增键值对 4.1 字典初始化 4.2 新增键值对 5、rehash(重新散列)操作 5.1 rehash操作方式 5.2 rehash发生时候 6、渐进式rehash 7、总结 8、参考 1、dict概述 dict顾名思义就是字典,也就是保存一种键值对的数据结构。每个键都是唯一的,不同...原创 2019-12-03 15:59:24 · 233 阅读 · 0 评论 -
redis源码剖析(2):基础数据结构ADLIST
目录 1、ADList概述 2、链表和链表节点定义 3、链表迭代器 4、总结 1、ADList概述 ADList(A generic doubly linked list)是redis自定义的一种双向链表,广泛运用于redisClients、redisServer、发布订阅、慢查询、监视器等(注:3.0及以前还会被运用于list结构中,在3.2以后...转载 2019-12-02 23:04:19 · 149 阅读 · 0 评论 -
redis源码剖析(1):基础数据结构SDS
目录 1、SDS概述 2、SDS的定义 2.1 3.2版本和3.0版本的差别 3、SDS数据结构解读 4、SDS重点源码分析 4.1 创建SDS 4.2 SDS拼接 4.3 SDS惰性空间释放 5、总结 1、SDS概述 redis没有直接使用c语言的字符串,而是自己定义了一个字符串数据结构:SDS(simple dynamic string)作为默认的...转载 2019-12-02 22:44:02 · 200 阅读 · 0 评论 -
redis源码剖析(4):基础数据结构skiplist
目录 1、跳跃表的zset应用场景分析 2、跳跃表的源码实现 2.1跳跃表的基本数据结构 2.2 跳跃表的结构图 2.3 跳跃表的创建 2.4 跳跃表的插入 3、参考 1、跳跃表的zset应用场景分析 众所周知Redis中每种基本类型都有2种或以上的底层实现,一般使用到ZSET时,我们会说它的实现是基于ziplist和skiplist实现的,这提供了多样性...原创 2019-12-02 17:57:59 · 145 阅读 · 0 评论 -
MYSQL C API风格demo
应该将MySQL的头文件以及操作的库文件一并拷贝到工程文件中,这样即使移植到别的安装有MySQL电脑或服务器,就不需要重新定位头文件以及相关的库文件,直接操作访问数据库。 1、移植MYSQL头文件 在linux中构建的Makefile工程要安装libmysqlclient-dev才能使用API接口的头文件。 命令:sudo apt-get install libmysqlclien...原创 2019-09-24 11:31:33 · 251 阅读 · 0 评论 -
Zlib的安装与测试
一、Zlib的安装 Linux平台: 1、Zlib的下载 wget http://www.zlib.net/zlib-1.2.11.tar.gz 2、解压 tar zxvf zlib-1.2.11.tar.gz 3、编译(进入zlib-1.2.11目录) ./configure && make && make install 源码编译...原创 2019-09-24 22:51:27 · 3491 阅读 · 0 评论 -
jsoncpp解析json报文测试
JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。 1、jsoncpp库下载 jsoncpp 是比较出名的 C++ JSON 解析库。在 JSON 官网也是首推的。 下载地址为:https://github.com/open-sou...原创 2019-09-24 19:28:57 · 445 阅读 · 0 评论 -
flamingo源码分析(1) :单例模式
此源码将单例模式设计成类模板,以提供给所需的类使用,使用方法如下: 单例类的设计: template<typename T> class Singleton { public: static T& Instance() { if (NULL == value_) { value_ = new T(); } return *value_...原创 2019-09-16 23:50:07 · 689 阅读 · 0 评论 -
搭建LevelDB环境及原理分析
一、搭建LevelDB环境 1、下载levelDB (或下载安装包自行解压) git clone https://github.com/google/leveldb.git 2、使用cmake编译(cmake神器,简单快捷) cd leveldb/ mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=Release ....原创 2019-03-14 20:55:52 · 1319 阅读 · 0 评论