
开源项目解析、实现及使用
文章平均质量分 86
本专栏介绍一些知名的开源项目的源码解析和使用方法
breaksoftware
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
zookeeper快速入门——简介
在几十年前,一个独立的计算机上往往部署着一套完整的应用系统。当时因为网络稳定性及速度的限制,将相关联的服务部署在一台机器上,让它们使用系统机制通信——比如管道,文件等,往往是最稳定和最高效的。然而随着网络技术的发展,特别是“云计算”和“大数据”的盛行,我们越来越多的谈到“分布式系统”——建立在网络上的软件系统。这样部署在不同机器上的关联服务就依赖于网络以及它们自定义的“协议”和“机...原创 2018-02-27 23:25:36 · 2406 阅读 · 1 评论 -
zookeeper快速入门——部署
zookeeper有两种运行模式:独立模式和仲裁模式。独立模式就是只运行一个Zookeeper Server,这自然没法解决服务崩溃导致系统不可用的问题。仲裁模式就是以集群的方式运行Zookeeper Server,这样在Leader不可用时,集群内部会发起选举,而推选一个新的Leader。既然我们要使用zookeeper,肯定是有分布式协作需求,所以本文只讲述仲裁模式的部署。(转...原创 2018-02-27 23:25:49 · 730 阅读 · 1 评论 -
zookeeper快速入门——应用(两种分布式锁)
在《zookeeper快速入门——简介》一文中,我们介绍了zookeeper的机制。但是还是比较抽象,没有直观感受到它在分布式系统中的应用。本文我们使用一个例子,三次迭代演进,来说明Zookeeper Client端和Server端如何配合以实现分布式协作。(转载请指明出于breaksoftware的csdn博客) 为了例子足够简单明确,我们以实现“分布式锁”为例。所...原创 2018-02-27 23:26:02 · 4902 阅读 · 1 评论 -
以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题
随着物质生活的丰富,人们的精神生活也越来越丰富。人们闲暇的时间也相对变多,于是很多人就开始寻找打发时间的方法。其中电视便是其中一种非常重要的消遣方式。假如我们打开电视机,看到了一个电视台正在播一部我们之前没看过的,正在一招一式进行打斗的武侠片;另一个电视台正在播一部之前也没看过的,正在重复太极推手的教学片。我想大部分人会选择那部武侠片。为什么?因为那是一个动作体系,不会让人厌烦。而那个推手教学片,原创 2013-03-08 23:47:16 · 7725 阅读 · 0 评论 -
以金山界面库(openkui)为例思考和分析界面库的设计和实现——资源读取模块分析
按照软件的执行流程,我们首先遇到《以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题》中提出的最后一个问题:界面描述文件的放置位置。我们曾提出一种方案:将界面描述文件打包后放在资源文件中;在使用时,解析并读取资源文件。实际上Kui也是按照我们这个思路在做的,只是做得比我们要精巧。在阅读这部分代码的过程中,我发现其存在一定的编码缺陷以及设计缺陷。我会在文中适时指出问题并提出修正及原创 2013-03-12 22:19:10 · 5676 阅读 · 2 评论 -
以金山界面库(openkui)为例思考和分析界面库的设计和实现——代码结构(完)
以金山开源界面库为例,讲解界面库的架构和设计。原创 2016-01-18 03:26:00 · 2666 阅读 · 0 评论 -
GoogleLog(GLog)源码分析
GLog是Google开发的一套日志输出框架。由于其具有功能强大、方便使用等特性,它被众多开源项目使用。本文将通过分析其源码,解析Glog实现的过程。 该框架的源码在https://github.com/google/glog上可以获取到。本文将以目前最新的0.3.3版本源码为范例进行分析。(转载请指明出于breaksoftware的csdn博客) ...原创 2016-05-10 19:18:54 · 14148 阅读 · 7 评论 -
Google Mock(Gmock)简单使用和源码分析——简单使用
初识Gmock是之前分析GTest源码时,它的源码和GTest源码在同一个代码仓库中(https://github.com/google/googletest)。本文我将以目前最新的Gmock1.7版本为范例,分析其实现原理。(转载请指明出于breaksoftware的csdn博客) Gmock是google开发的一套辅助测试的工具,它往往和GTest结合在一起使...原创 2016-05-18 18:36:28 · 27177 阅读 · 7 评论 -
Google Mock(Gmock)简单使用和源码分析——源码分析
源码分析 通过《Google Mock(Gmock)简单使用和源码分析——简单使用》中的例子,我们发现被mock的相关方法在mock类中已经被重新实现了,否则它们也不会按照我们的期待的行为执行。我们通过阅读源码,来分析整个过程的实现逻辑。(转载请指明出于breaksoftware的csdn博客)MOCK_METHOD系列宏 首先我们以MOCK_METHOD0...原创 2016-05-18 18:37:02 · 15600 阅读 · 4 评论 -
Simple Dynamic Strings(SDS)源码解析和使用说明一
SDS是Redis源码中一个独立的字符串管理库。它是由Redis作者Antirez设计和维护的。一开始,SDS只是Antirez为日常开发而实现的一套字符串库,它被使用在Redis、Disque和Hiredis等作者维护的项目中。但是作者觉得这块功能还是比较独立的,应该让其成为一个独立的库去被使用。于是就开发了第二版的SDS。本文我们要讨论的SDS就会是基于这个版本的。(转载请指明...原创 2016-12-01 19:58:40 · 2720 阅读 · 1 评论 -
Simple Dynamic Strings(SDS)源码解析和使用说明二
在《Simple Dynamic Strings(SDS)源码解析和使用说明一》文中,我们分析了SDS库中数据的基本结构和创建、释放等方法。本文将介绍其一些其他方法及实现。(转载请指明出于breaksoftware的csdn博客)字符串连接 SDS库提供下面两种方法进行字符串连接sds sdscatlen(sds s, const void *t, size_...原创 2016-12-01 20:00:00 · 2196 阅读 · 0 评论 -
Redis源码解析——前言
今天开启Redis源码的阅读之旅。对于一些没有接触过开源代码分析的同学来说,可能这是一件很麻烦的事。但是我总觉得做一件事,不管有多大多难,我们首先要在战略上蔑视它,但是要在战术上重视它。除了一些高大上的技术,我们一般人都能用比较简单的方式描述它是干什么的。比如Redis,它不就是一个可以通过网络访问的KV型数据库嘛。在没有源码的情况下,可以想象出它应该是通过网络服务、指令解析、特殊...原创 2016-12-08 20:21:10 · 8666 阅读 · 0 评论 -
Redis源码解析——内存管理
在《Redis源码解析——源码工程结构》一文中,我们介绍了Redis可能会根据环境或用户指定选择不同的内存管理库。在linux系统中,Redis默认使用jemalloc库。当然用户可以指定使用tcmalloc或者libc的原生内存管理库。本文介绍的内容是在这些库的基础上,Redis封装的功能。(转载请指明出于breaksoftware的csdn博客)统一函数名 ...原创 2016-12-08 20:23:15 · 5608 阅读 · 1 评论 -
Redis源码解析——字典结构
C++语言中有标准的字典库,我们可以通过pair(key,value)的形式存储数据。但是C语言中没有这种的库,于是就需要自己实现。本文讲解的就是Redis源码中的字典库的实现方法。(转载请指明出于breaksoftware的csdn博客) 一般情况下,我们谈到字典,难免要谈到红黑树。但是Redis这套字典库并没有使用该方案去实现,而是使用的是链表,且整个代码行数...原创 2016-12-08 20:25:11 · 2914 阅读 · 2 评论 -
Redis源码解析——字典基本操作
有了《Redis源码解析——字典结构》的基础,我们便可以对dict的实现进行展开分析。(转载请指明出于breaksoftware的csdn博客)创建字典 一般字典创建时,都是没有数据的,但是字典类型需要确定,所以我们看到Redis字典创建主要需要定义数据操作的dictType对象:static void _dictReset(dictht *ht){...原创 2016-12-08 20:26:12 · 2224 阅读 · 1 评论 -
Redis源码解析——字典遍历
之前两篇博文讲解了字典库的基础,本文将讲解其遍历操作。之所以将遍历操作独立成一文来讲,是因为其中的内容和之前的基本操作还是有区别的。特别是高级遍历一节介绍的内容,充满了精妙设计的算法智慧。(转载请指明出于breaksoftware的csdn博客)迭代器遍历 由于Redis字典库有rehash机制,而且是渐进式的,所以迭代器操作可能会通过其他特殊方式来实现,以保...原创 2016-12-08 20:28:22 · 2752 阅读 · 0 评论 -
Redis源码解析——双向链表
相对于之前介绍的字典和SDS字符串库,Redis的双向链表库则是非常标准的、教科书般简单的库。但是作为Redis源码的一部分,我决定还是要讲一讲的。(转载请指明出于breaksoftware的csdn博客)基本结构 首先我们看链表元素的结构。因为是双向链表,所以其基本元素应该有一个指向前一个节点的指针和一个指向后一个节点的指针,还有一个记录节点值的空间t...原创 2016-12-09 00:03:38 · 3789 阅读 · 4 评论 -
Redis源码解析——有序整数集
有序整数集是Redis源码中一个以大尾(big endian)形式存储,由小到大排列且无重复的整型集合。它存储的类型包括16位、32位和64位的整型数。在介绍这个库的实现前,我们还需要先熟悉下大小尾内存存储机制。(转载请指明出于breaksoftware的csdn博客)大小尾(Big Endian/Little Endian) 第一次接触这个概念还是在大学时上...原创 2016-12-13 00:11:03 · 2361 阅读 · 2 评论 -
Redis源码解析——Zipmap
本文介绍的是Redis中Zipmap的原理和实现。(转载请指明出于breaksoftware的csdn博客)基础结构 Zipmap是为了实现保存Pair(String,String)数据的结构,该结构包含一个头信息、一系列字符串对(之后把一个“字符串对”称为一个“元素”(ELE))和一个尾标记。用图形表示该结构就是: Redis源码中并没...原创 2016-12-14 22:43:48 · 5536 阅读 · 1 评论