自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (13)
  • 收藏
  • 关注

原创 Mojolicious 框架--- 源代码分析

为什么学习perl,因为perl难,为什么难了还要学,因为学会了做事情就简单了Mojolicious 框架真的很酷,1行代码可以完成其他语言100行才能完成的事情,各种奇异符号会让你干瞪眼,看代码需要猜,需要反复,需要思考,在这之前我只会自己用perl写一些工具,不知道继承,不知道对象,也没有看书,所以我不懂得时候就盯着代码看,一直盯着,真的有效果,查单词变量的原始英文翻译,猜,真的能猜中。M...

2018-08-31 10:08:06 634

原创 jemalloc横向分析(六)tcache_event事件执行

tcache_alloc_small最后调用了tcache_event里面tcache->ev_cnt++;当tcache->ev_cnt == TCACHE_GC_INCR(211)时/* * TCACHE_GC_SWEEP is the approximate number of allocation events between * full GC sweeps.  In

2017-08-11 15:31:54 1066

原创 jemalloc横向分析(五)tcache分配内存

先分析一个结构体arena_bin_s,它隶属于一个area,也可以理解成,它代表了这个areastruct arena_bin_s {    /*     * All operations on runcur, runs, and stats require that lock be     * locked.  Run allocation/deallocation are p

2017-08-03 15:21:11 1334

原创 jemalloc横向分析(四) tcache分配内存中使用到的位图bitmap

/* * Read-only information associated with each element of arena_t's bins array * is stored separately, partly to reduce memory usage (only one copy, rather * than one per arena), but mainly to

2017-08-02 15:51:46 718

原创 jemalloc横向分析(三) arena_run_split_large使用分配的chunk存放tcache

chunk分配完成,管理每一页的mapbits和misc信息设置完成,然后就是分配一块内存放tcache相关的信息了tcache相关信息的大小前面已经计算过,经过对齐和sa2u,大小是32768,0x8000,需要8页,但是arena_malloc_large函数分配时加上了large_pad这个大小是1页,所以总共使用了9页,大小是0x9000,36864这就是arena_run_s

2017-07-26 15:55:15 667

原创 jemalloc横向分析(二) rtree分析

rtree实现./include/jemalloc/internal/rtree.h./src/rtree.c用法./test/unit/rtree.c/* 这个基数树是为了实现连接元数据和jemalloc当前拥有的chunks这一单个目的,而量身定做的 * This radix tree implementation is tailored to the sing

2017-07-25 14:54:45 736

原创 jemalloc横向分析(一) 核心结构体

第一个结构体arena_sstruct arena_s {    /* This arena's index within the arenas array. */    unsigned        ind;该结构在arenas数组中的索引    /*     * Number of threads currently assigned to this arena.

2017-06-30 10:50:46 1287

原创 Jemalloc free的过程

redis第一次调用free函数(gdb) bt#0  je_free (ptr=0x7ffff661b000) at src/jemalloc.c:1837#1  0x000000000043194e in zfree (ptr=0x7ffff661b000) at zmalloc.c:204#2  0x0000000000423ea7 in dictRehash (d=0x7f

2017-06-26 12:25:33 3380

原创 Jemalloc malloc的分配过程,以redis的第一次内存分配malloc(1)展开

(gdb) bt#0  je_malloc (size=1) at src/jemalloc.c:1422#1  0x00000000004316b3 in zmalloc (size=1) at zmalloc.c:125#2  0x000000000043197c in zstrdup (s=0x6cf8c5 "") at zmalloc.c:215#3  0x00000000

2017-06-08 18:12:44 2035

原创 Linux系统源代码升级glibc到最新版本2.25.90(正在开发的版本)

网上关于升级glibc的文章不少,但没有一篇能成功的,本人被坑过无数次,以至后来能避就避,今天自己在虚拟机上实验,终于成功,我把升级过程记录下来,为网友提供完整的升级方法。升级是在ubuntu下进行的,但是其他系统升级也类似:准备两个Linux系统, 一个是你要升级glibc的系统B, 另一个B用于glibc升级失败之后恢复, 它能挂载升级失败的系统的根文件系统, 恢复失败的系

2017-04-13 18:52:19 9603 2

原创 Jemalloc 初始化(二) index2size和size2index解析

前面没有分析完 Jemalloc 初始化,是因为遇到了一个表不得其解,所以停下来分析,这是一个精妙的算法,通过index可以算出size,通过size也可以算出index。我是从size推算index开始研究的注释的数是在以下推导的基础上填的#define    SIZE_CLASSES \  /* index, lg_grp, lg_delta, ndelta, bin, lg_

2017-04-07 15:43:11 2577

原创 Jemalloc 初始化

因为redis用到了jemalloc,所以有幸研究jemalloc的源代码,我们熟悉的内存管理函数无非就两个,一个是malloc,一个是free,它们内部是如何工作的,平时很少有机会得知,因为这两个函数被编译在glibc中,编译glibc都是很难的事,更何况去debug它,不debug源代码,仅靠文档知识,也只是一知半解,人云亦云。所以决定彻底的debug一遍jemalloc的代码。debug

2017-04-07 11:59:29 4132

原创 Redis-3.2.8 Makefile分析

Redis的makefile主要是src目录下的makefile,编译的日志也不多,300多行,Redis的makefile用到了make的一些高级规则默认的配置文件.make-settings,给CC,MAKE上色,如果执行make V=1就不会看到CC上色.make-prerequisites定义的规则在默认的目标all之前执行,而且.make-prerequisites定义的

2017-04-01 15:46:42 1269

原创 c++在unix系统上访问ms sqlserver的方法

ms sqlserver是微软出品,自然没有unix版本,对于c++来说,客户端也很少,最著名的是freetds,他有两种访问模式,一种就是ODBC的方式,还有一种是直连的方式。对于大部分开发者来说,减少配置,是一致的看法。所以本文介绍freetds直连sqlserver的方法。freetds提供了两个库,一是libsybdb,另一个是libct,两者都可以完成。但是如果直接使用fre

2017-03-23 17:42:07 493

原创 基于boost asio的redis客户端redisclient

如果说c++11引领了C++编程的潮流,那么boost::asio则是最时尚,最fashion的设计。redisclient基于C++11实现,它没有像cpp_redis设计自己的异步框架,而是直接使用boost asio。redisclient的makefile写的不是很好,可能找不到boostset(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PA

2017-03-13 19:04:03 2526

原创 cpp_redis几种client的区别

cpp_redis在example目录下提供了4个client,这4个client基本覆盖了cpp_redis的所有用法,每个client的架构和实现描述如下:redis_client纯异步执行,忽略返回值(他是有返回值的,当然也可以用,用于命令连写的方式),命令结果返回来执行回调函数future_client基于redis_client实现,返回值是future,返回fu

2017-03-08 12:03:10 4042

原创 redis的c++客户端cpp_redis代码分析

cpp_redis是一个基于c++11编写的redis客户端,比较简单,也比较强大,支持集群本篇分析是基于一个简单的set命令来展开的为了便于调试和查看代码运行轨迹,编译时用如下命令:cmake -DBUILD_EXAMPLES=true -DLOGGING_ENABLED=true .这是查看完CMakefile.txt后得出的cpp_redis使用了taco

2017-03-06 15:28:16 5109 1

原创 C++11可变数量模板参数可变类型模板参数并使用lamada函数调用使用范例

为了完成这个功能,耗费一整天。背景是需要到一张表中查询,条件不一样,但是都可以通过PreparedStatement_setXX设置,想体验一把C++11的高级模板特性,设计如下封装inline void set_para(PreparedStatement_T prepStat, int idx, std::string& str) { PreparedStatement_

2017-01-13 16:28:11 1382 2

原创 CentOS release 6.6 (Final) 编译mesos-1.1.0

系统的库陈旧,主要工作就是安装依赖,而且不能yum安装(极少部分可以),需要源代码安装源代码大部分都编译不过,需要修改代码,有的需要修改M4宏,有的需要修改Makefile,有的需要将已经安装在/usr/lib下的库拷贝到/usr/lib64或者/usr/local/xxx/lib下面,有的make install不会拷贝头文件,需要自己手工拷贝。这些依赖都是在configure

2016-12-28 13:48:31 1075

原创 nginx源代码分析 - 收到请求(一) accept处理事件

收到客户端请求epoll_wait返回events = 1,ngx_connection_t  *c = event_list[i].data.ptr;static struct epoll_event  *event_list;typedef union epoll_data {    void         *ptr;    int           fd;

2016-12-01 14:37:20 469

原创 nginx源代码分析 - 启动(八) 避免epoll_wait惊群

nginx使用epoll来处理accept事件,所有会有epoll惊群问题,ngx_accept_disabled = ngx_cycle->connection_n / 8 - ngx_cycle->free_connection_n; 这个变量是禁用accept,就是现在的连接数比较多ngx_use_accept_mutex全局变量为1,才开启避免惊群的现象ngx_us

2016-11-30 19:36:15 1626

原创 nginx源代码分析 - 启动(七) IO多路复用模型的使用

在配置文件里指定了use epoll,也存到ngx_event_conf_t ecf的ecf->use域,那么是哪里使用这个配置,找到epoll的一系列回调函数的呢,(gdb) bt#0  ngx_epoll_init (cycle=0x72d530, timer=0) at src/event/modules/ngx_epoll_module.c:327#1  0x00000

2016-11-28 12:28:14 332

原创 nginx源代码分析 - 启动(六) 关于worker进程绑定CPU的细节

关于worker进程绑定CPU的细节配置:worker_processes  2;worker_cpu_affinity 01 10;linux,NGX_HAVE_SCHED_SETAFFINITY宏,sched.htypedef cpu_set_t  ngx_cpuset_t;如果worker_cpu_affinity后面是auto,CPU_ZERO(&mas

2016-11-24 15:27:33 1367

原创 nginx源代码分析 - 启动(五) 调试后台进程和worker进程

nginx的网络模型是,master进程,即daemon进程,负责listen+bind,所有子进程都监听80端口,注册监听fd的读事件,即accept事件。多进程调试方法sudo gdb ./objs/nginxr -p /home/liuwb/Desktop/code/nginx-code/ -c conf/nginx.confinfo inferiorsf

2016-11-23 17:10:50 829

原创 nginx源代码分析 - 启动(四) 创建后台进程和worker进程

全局变量ngx_cycle = cycle;ngx_process = NGX_PROCESS_MASTER; 1ngx_init_signals(cycle->log)安装信号处理函数遍历全局signals数组struct sigaction   sa;ngx_memzero(&sa, sizeof(struct sigaction));sa.sa_handler

2016-11-22 18:47:29 647

原创 nginx源代码分析 - 启动(三) ngx_init_cycle - 剩余

上一篇和这一篇都是基于nginx源代码包自带的配置文件,加上之前调试环境搭建里面贴出来的配置创建目录/home/liuwb/Desktop/code/nginx-code/client_body_temp/home/liuwb/Desktop/code/nginx-code/proxy_temp/home/liuwb/Desktop/code/nginx-code/fast

2016-11-19 15:09:10 337

原创 nginx源代码分析 - 启动(二) ngx_init_cycle - 解析配置文件

cycle = ngx_init_cycle(&init_cycle);ngx_timezone_update对于Linux系统来说,没做什么tp = ngx_timeofday();得到ngx_cached_timetp->sec = 0; 秒数清0再次调用ngx_time_update在新的slot存入新的time更新相应的全局变量log = old_cyc

2016-11-19 11:52:18 634

原创 nginx 源代码分析 - 启动(一)

auto/cc/gcc,CFLAGS不仅要加上-g,还要加上-ggdb -O0sudo gdb ./objs/nginxr -p /home/liuwb/Desktop/code/nginx-code/ -c conf/nginx.confngx_strerror_initNGX_SYS_NERR = 135初始化ngx_sys_errlist数组,索引代表errc

2016-11-09 19:10:30 485

原创 nginx 源代码分析 - 调试环境搭建

nginx以其做廉价的负载均衡服务器而闻名,要研究nginx源代码,就需要搭建一套便于调试的环境,来跟踪代码运行首先我们需要2台RS(real server),就是nginx世界里所说的上游服务器,nginx本身是一个VS(virtual server),客户端访问VS,VS通过负载均衡算法,访问RS,获取相应,返回给客户端。RS的搭建在上篇文章已经介绍了。然后就是修改

2016-11-03 17:40:58 398

原创 apache 2.4 配置多个端口监听的方法

1.拷贝目录htdocs,为htdocs2,htdocs3,可以改index.html,以作区分2.httpd.conf里添加listen端口Listen 8082 Listen 8083,放开httpd-vhosts.conf注释3.httpd-vhosts.conf里添加    Order allow,deny    Allow from all    Or

2016-11-03 16:37:48 4310

原创 伸展树介绍 - 使用自顶向下的调整算法

伸展树自顶向下的伸展Node* splaytree_splay(SplayTree tree, Type key)Node N, *l, *r, *c;N用来表示存放左树和右树根节点的一个Node,其中N->left存放右树的根节点,N->right存放左树的根节点l表示右树最小节点,r表示左树最大节点,在伸展的过程中,l和r不断变化,并且通过变化连接了每一轮左右树的最大和和最小节

2016-11-02 14:57:22 646

原创 nginx源代码分析 - 红黑树实现

在读代码之前需要先了解红黑树的特性以及插入,删除算法,插入比较简单,删除比较麻烦,以下是算法和代码的分析红黑树是2-3树的变形1. 每个节点要么是红的,要么是黑的。2. 根节点是黑的3. 叶节点是黑的(叶节点是NIL节点,空节点)4. 红节点的两个孩子都是黑的5. 任意节点,从这个节点出发,到叶节点的每一条路径上,黑节点数目都相同一般总是插入红色的节点,

2016-11-01 19:19:49 314

原创 nginx源代码分析 - nginx自旋锁实现

架构系统相关的代码(amd64, Linux)相关定义typedef int64_t                     ngx_atomic_int_t;typedef uint64_t                    ngx_atomic_uint_t;typedef volatile ngx_atomic_uint_t  ngx_atomic_t;#define

2016-10-20 16:45:11 608

原创 nginx源代码分析 - 生成的Makefile解析

生成的Makefile分析变量赋值CC,CFLAGS,CPP,LINK($CC),ALL_INCS(-I...),CORE_DEPS, CORE_INCS, HTTP_DEPS, HTTP_INCS目标build:  binary modules manpagebinary: objs/nginxobjs/nginx:     objs/src/core/nginx.o

2016-10-18 18:47:32 1223

原创 nginx源代码分析一 configure解析

要在顶层目录执行auto/configure执行完后生成了Makefile和objs目录,objs目录里有src的目录层次以及autoconf.err,Makefile,ngx_auto_config.h,ngx_auto_headers.h,ngx_modules.c目录里都是空的configure就是一个shell脚本,开头引入3个脚本auto/optionsshe

2016-10-18 14:26:13 1421

原创 libzdb --- mysql 的一个数据库连接池代码分析

安装了re2c运行bootstrap后生成了autom4te.cache目录,m4目录文件config\compileconfig\config.guessconfig\config.subconfig\ltmain.shsrc\xconfig.h.intest\Makefile.inaclocal.m4configureMakefile.in

2016-10-17 14:52:42 1442

原创 Thrift C++ server 网络架构

Thrift 的非阻塞server TNonblockingServer 效率并不高,虽然是非阻塞,但是是同步的架构

2016-09-29 17:59:09 497

原创 Thrift C++ server 线程模型

一幅图概括:

2016-09-29 17:54:10 965

原创 thrift C++代码分析

C++生成的代码,越上面的越新Calculator.cppCalculator.hCalculator_server.skeleton.cppshared_constants.cppshared_constants.hSharedService.cppSharedService.hSharedService_server.skeleton.cppshared_t

2016-09-29 17:52:11 2664

原创 高性能协程库State Thread Library源代码剖析之二寻找入口

目前人类认知的所有现象,规律,定理都是有源可寻,有根可究的,唯一不知道根源的可能是谁创造了万有引力。对于软件工程师来说,一个软件系统生命开始的地方就在软件系统的入口,应用程序就是main函数,kernel就是kernel_entry。但是这里我们研究的是一个库,库自然是给应用程序使用的,应用程序在哪里呢,在example下。lookupdns.c 查找域名的ip,可输入多个域名st

2016-09-29 17:38:12 777

Mastering MongoDB 4.x - Second Edition.pdf

Mastering MongoDB 4.x - Second Edition 完整版,pdf格式,全网唯一版本,欢迎下载学习

2019-09-17

HTTP/2 in Action 英文版 完整版

http2全面系统的讲述,适合进阶学习,有所深度,比看rfc效率提高很多

2019-04-02

C++11程序设计(第2版)英文版

C++11程序设计(第2版)英文版 自己用工具转的,版上分都很贵,这个转的带索引,分享给大家

2018-09-13

Modern C ++ Programming Cookbook

2018年最新版Modern C ++ Programming Cookbook,用工具自己转的,没有书签,但是清晰度可以

2018-08-06

C++性能优化手册(影印版)

C++性能优化手册(影印版)

2017-05-25

《OSPF协议完全实现》源代码

《OSPF协议完全实现》光盘已经没有下载了,这是好不容易找到的随书源代码,用C++实现,参照书本内容,很有学习价值。

2014-08-13

OSPF协议完全实现

OSPF协议完全实现高清电子版.提供了一个odpf的具体实现

2014-08-05

Eclat算法C++实现,Eclat算法C++实现

Eclat算法 Eclat算法 Eclat算法 Eclat算法 Eclat算法

2011-06-02

数据挖掘FP树算法实现C++

数据挖掘FP树算法C++实现,可实现对多种数据类型挖掘

2011-04-29

Apriori 算法

Apriori算法

2010-11-07

Java实现传教士过河问题

人数被声明为CrossRiver类的一个属性,可以在代码里修改,程序可以找出所有路径,最短路径。

2010-08-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除