开源源码分析
good-destiny
这个作者很懒,什么都没留下…
展开
-
【muduo源码分析】Buffer类的设计
目录1、muduo的IO模型2、为什么 non-blocking 网络编程中应用层 buffer 是必须的?2.1TcpConnection 必须要有 output buffer2.2TcpConnection 必须要有 input buffer3、Muduo Buffer 的数据结构3.1 muduo buffer类设计3.2 核心函数分析4、参考1...原创 2019-12-20 17:05:22 · 271 阅读 · 0 评论 -
【muduo源码分析】TcpServer服务架构
1、muduo整体类图2、服务器TcpServer(1)TcpServer由用户直接使用,生命周期由用户控制,用户设置好相应的回调MessageCallback、ConnectionCallback传递给TcpServer即可;MessageCallback为连接上有接收数据时调用的回调(处理业务逻辑),这些数据存放在连接的应用层接收缓冲区中;ConnectionCallback在连...转载 2019-12-20 09:35:10 · 237 阅读 · 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 · 642 阅读 · 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 · 178 阅读 · 0 评论 -
redis源码剖析(6):基础数据结构ziplist
目录1、简介2、数据存储2.1 编码2.2 结构体entry3、基本操作3.1 创建压缩列表3.2 插入元素3.3 删除元素3.5 遍历压缩列表4、连锁更新5、总结1、简介 压缩列表(ziplist)本质上就是一个字节数组,是Redis为了节约内存而设计的一种线性数据结构,可以包含任意多个元素,每个元素可以是一个字节数组或一个整数。 ...转载 2019-12-03 17:07:09 · 175 阅读 · 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 · 411 阅读 · 0 评论 -
redis源码剖析(3):基础数据结构dict
目录1、dict概述2、字典的定义3、哈希算法4、字典的初始化及新增键值对4.1 字典初始化4.2 新增键值对5、rehash(重新散列)操作5.1 rehash操作方式5.2 rehash发生时候6、渐进式rehash7、总结8、参考1、dict概述 dict顾名思义就是字典,也就是保存一种键值对的数据结构。每个键都是唯一的,不同...原创 2019-12-03 15:59:24 · 242 阅读 · 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 · 163 阅读 · 0 评论 -
redis源码剖析(1):基础数据结构SDS
目录1、SDS概述2、SDS的定义2.1 3.2版本和3.0版本的差别3、SDS数据结构解读4、SDS重点源码分析4.1 创建SDS4.2 SDS拼接4.3 SDS惰性空间释放5、总结1、SDS概述 redis没有直接使用c语言的字符串,而是自己定义了一个字符串数据结构:SDS(simple dynamic string)作为默认的...转载 2019-12-02 22:44:02 · 228 阅读 · 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 · 151 阅读 · 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 · 256 阅读 · 0 评论 -
Zlib的安装与测试
一、Zlib的安装Linux平台:1、Zlib的下载wget http://www.zlib.net/zlib-1.2.11.tar.gz2、解压 tar zxvf zlib-1.2.11.tar.gz 3、编译(进入zlib-1.2.11目录) ./configure && make && make install源码编译...原创 2019-09-24 22:51:27 · 3574 阅读 · 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 · 458 阅读 · 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 · 700 阅读 · 0 评论 -
搭建LevelDB环境及原理分析
一、搭建LevelDB环境1、下载levelDB (或下载安装包自行解压)git clone https://github.com/google/leveldb.git2、使用cmake编译(cmake神器,简单快捷)cd leveldb/mkdir -p build && cd buildcmake -DCMAKE_BUILD_TYPE=Release ....原创 2019-03-14 20:55:52 · 1347 阅读 · 0 评论