- 博客(136)
- 资源 (44)
- 问答 (1)
- 收藏
- 关注
原创 败者树多路排序
定义:败者树是一个完全二叉树,非叶子节点记录失败者。那么相对于胜者树,具有访存小的优势。胜者树胜者拿走后,整条通路(从叶子到根)所有记录的胜者信息失效,那么新加入节点需要从叶子一直遍历到根,有可能每次都要写入(更新新的胜者)。而败者树,新加入的节点可以利用整条路径的败者信息。败者树构建构建过程: ① 初始四个数组,1,2,3,4,内部节点为-1;构建完全后,内部节点记录数组编号。 ② 数组4中元
2017-09-30 14:45:16 1023
原创 git基本命令
基本流程stash ----> work ----> index ----> local repo ----> remote repostash 暂存空间 work 当前工作空间 index 为git追踪文件目录,通过git add将文件加入index(精心准备提交的文件) local repo 本地仓库 remote repo 远程仓库基本命令CON...
2017-01-14 22:41:51 863
原创 一场Socket四次握手引发的血案
一场Socket四次握手引发的血案前奏Hello Everybody,原谅我是一个标题党。事情是这样的,周末,同事在微信上抛来一个问题,原文如下:服务端某个服务timewait过多,网上说端口会耗尽,我怎么感觉是fd会耗尽呢,因为一个服务通常只使用一个端口在记忆的某个角落里,翻出了四次握手的状态图,虽然模模糊糊,但是还是有点印象。
2016-07-28 19:56:37 3020 4
原创 protobuf 安装与使用
安装安装依赖autoconfsudo apt-get install autoconflibtool sudo apt-get install libtool准备源码下载源码 protobuf 2.6.1解压 unzip protobuf-2.6.1.zip安装$ ./autogen.sh$ ./con
2016-07-09 17:35:12 709
原创 自己动手写线程池之锁的优化
问题描述线程池将任务Task添加到工作队列中,该队列使用STL List实现。每次添加任务的时候,都需要获取线程锁,然后操作队列。template typename Item>void ThreadQueue::Push(const Item &item){ { ThreadLocker::Locker lock(&_locker); _q
2016-07-09 16:46:57 883
原创 自己动手写线程池之线程池实现
线程池工作流终于来到这了,前面做了若干准备工作,都是为了构建线程池。仿照NGINX线程池模型,绘制了线程池工作流程,如下图所示:任务定义任务基类Task,所有用户自定义Task都要继承该类,实现Exec方法。线程从任务队列中获取Task,执行Exec。class Task{public: virtual void Exec()
2016-07-09 16:45:24 736
原创 自己动手写线程池之锁的管理
锁的裸用pthread_mutex_t mutex;pthread_mutex_init(&mutex, &mutex_attr);pthread_cond_t cond;pthread_cond_init(&cond, &cond_attr)//////////////////////////////////////////////pthread_mutex_lock(&mutex)
2016-07-09 16:43:08 882
原创 自己动手写线程池之异常
C语言中,通过函数返回值来获知此次操作的结果。在实现线程池时,采用异常机制。同时,为了能够精确区分抛出异常的类以及对异常的精确处理,在每个类中,都实现一个针对该类定制的异常类。异常基类class Exception : public exception{public: explicit Exception(const string &text); Exception
2016-07-08 13:15:44 446
原创 自己动手写线程池之线程
线程封装pthread_t tid;pthread_create(&tid, NULL, callback, NULL);最原始的线程创建方式,线程通过回调函数callback来实现不同的功能。这种方式不仅使得线程创建函数散落在代码的各个地方,而且通过函数功能来区分线程有违面向对象概念。接下来,通过面向对象思想将线程进行封装,用户只需要继承线程基类,实现回调函数,即可完成自定义
2016-07-08 10:05:31 1319
原创 Shell 实现多任务并发
实现思路实现一个shell进程库,通过类似于init,run,wait几个简单的命令,就可以迅速实现多进程并发,伪码如下:process_init # 创建进程for city in ${cities[*]}do cmd="handler $city" process_run $cmd doneprocess_wait # 等待进程原理解析在
2016-05-17 09:02:00 27926
原创 Valgrind 内存问题简述
参数配置gcc-g: 增加调试信息,供valgrind精确定位。-O0:关闭gcc优化;优化产生的代码可能会造成valgrind误判。valgrind--leak-check=fullno: 不进行内存泄露检测; summary: 显示内存泄露情况; full:不仅显示内存泄露,还显示出错代码。--show-rea
2016-05-11 16:12:31 5563
原创 Linux 调试工具
gprof代码信息代码:N皇后问题,N=14bool place(int *result, int row){ for(int i = 1; i { if(result[i] == result[row] || abs(i-row) == abs(result[i] - result[row])) {
2016-05-11 16:09:45 653
原创 Linux 系统监测工具
uptime[~]$ uptime13:24:46 up 207 days, 3:27, 2 users, load average: 1.45, 1.34, 1.33system time: 系统当前时间13:24:46 system uptime:系统运行时间207天3小时27分 users:当前登入系统的用户数 load average:过去的1分钟,5
2016-05-11 16:00:40 9594
原创 Shell 简易教程
语法变量${variable} 获取变量值,简写$variable。当涉及变量拼接时,必须使用{}。如:${variable}_name。variable=value 变量赋值,=左右两边不能有空格。命令结果赋值。 variable=$(ls -a) 或者 varivale=`ls -a` 。环境变量。打开shell的时候,创建环境变量。该shell创建的子进程将继承该
2016-05-11 15:58:31 7655
原创 libevent-1.4.so.2动态链接库加载失败
问题描述:./server: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory问题原因:LD_DEBUG=libs ./server -v > log 2>&1在所有搜寻路径中,都无法
2016-05-09 13:52:10 3414
原创 Linux 三剑客之AWK
3. Awk3.1 语法AWK 命令模式:地址+动作 awk '/search pattern/ {actions}' file地址通过正则表达式匹配得到,AWK默认采用ERE 模式。3.2 参数 参数 含义 -F field-separator, 字段分隔符 -f 引入awk脚本 -v -v var=val, 设置变量值字段 与 记录记录: 类似于数据库中的一行数
2016-03-04 12:40:01 1408
原创 Linux 三剑客之Grep&Sed
1. Grep语法 grep pattern filename pattern 参考简单正则参数 参数 函数 -i 忽略大小写 -w 全词匹配 -r/R 递归匹配文件夹中文件 -n 显示行号 -c 显示匹配行数 -v 显示不匹配的行 -l 显示匹配的文件名grep -i -l -r "Student" /src/ --color
2016-03-04 12:39:13 997
原创 正则表达式简单用法
1. 正则语法1.1 基本元字符 元字符 含义 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意空白符 (Space Tab) \d 匹配数字 ^ 匹配字符串的开头 $ 匹配字符串的结尾1.2 重复 元字符 含义 * 零次或更多次 + 一次或更多次 ? 零次或一次 {n}
2016-01-24 15:31:09 4070
原创 Makefile 简易教程
1. 定义target: dependencies[tab] command NOTE: [tab] 不能为四个空格。2. 使用规则2.1 测试文件 func.h func.cpp main.cpp+++++++++++++++++++++++++++++++++++++++++++++++++++
2016-01-15 11:40:29 577
原创 SVN 简单使用方法
SVN 简单使用方法1. SVN 数据流2. SVN 命令2.1 基本命令co [checkout] 远程仓库checkout到本地 up [update] 远程仓库中版本变化更新到本地 ci [commit] 工作目录中文件变化提交到远程仓库 st [status] 工作目录中文件状态 add 将文件纳入版本管理 Note:status 状态 A A
2016-01-12 09:30:25 1064
原创 pthread mutex 属性
mutex互斥锁有四种属性,分别是NORMAL, ERRORCHECK, RECURSIVE, DEFAULT。
2015-12-02 09:47:38 3275
原创 libevent事件循环
1. 纠正时间,因为用户可能手动更改本地时间,这样导致时间不准确,超时事件受到影响。2. 获取堆顶元素超时时间,与当前时间相减,得到差值,该差值传给epoll,让其最晚在差值时间后返回。如果,当前堆顶已经超时了,则直接返回0,让epoll_wait 立即返回。3. 记录时间点1, tv_cache-> event_tv4. epoll_wait等5. 记录时间点 2 系统调用获取
2014-11-13 10:34:40 1267
原创 libevent定时器机制
超时机制:时间是时间点,比如8:40:35超时,那么获得当前时间,如果小于该时间,则视为超时。 添加超时事件:添加超时事件的时候,添加相对时间,比如8s后超时,在内部会进行处理,即取得当前时间,加上超时时间,得到超时时间点。 struct timeval tv; tv.tv_sec = 10;tv.tv_usec = 0; evtimer_set(&ev
2014-11-13 10:30:31 983
原创 libevent信号机制
结构体struct evsignal_info { struct event ev_signal; /* 整体作为一个事件,加入epoll中 */ int ev_signal_pair[2]; /* 信号套接字 */ int ev_signal_added; /* 是否加入epoll */volatile sig_atomic_t evsignal
2014-11-13 10:29:46 1395
原创 libevent主要数据结构
1. 通用结构体#define TAILQ_ENTRY(type) \struct { \ struct type *tqe_next; /* next element */ \ struct type **tqe_prev; /* previous element */ \
2014-11-13 10:28:42 1040
原创 env export set declare区别
1. env 显示当前系统的环境变量 G_BROKEN_FILENAMES=1HISTCONTROL=ignoredupsHISTSIZE=1000HOME=/rootHOSTNAME=www.nginx.comJAVA_HOME=/usr/java/jdk1.8.0_20LANG=en_US.UTF-8LESSOPEN=|/usr/bin/lesspipe.sh %s
2014-11-12 22:03:15 925
原创 中缀转后缀求值
中缀转后缀思路:1. 扫描字符串,遇到数字输出,遇到操作符c 栈顶操作符的权值小于c,直接入栈 栈顶操作符的权值大于等于c,依次弹出,直到栈顶权值小于c,c入栈2. 括号需要特别处理,入栈之前与入栈之后,括号的优先级发生变化 ‘(’在栈外权值最大,即无条件入栈 ‘(‘在栈内权值最小,即任何其他(除‘)’外)操作符,都可入栈
2014-07-14 17:00:34 775
原创 NGINX 时间管理机制
nginx 自己维护了一个时间,用户向用户提供时间,它使用缓存时间的机制,这样避免了频繁的系统调用(gettimeofday),降低时间消耗。但缓存时间,又必须要及时更新时间,否则时间将不准确。
2014-06-10 10:26:25 1809
原创 epoll 惊群
起因:最近,一直在学习nginx。对于事件模块所解决的”惊群“现象完全不明白,遂产生了此文。套接字:可以将服务器端的套接字分为 监听套接字 与 连接套接字。 监听套接字负责等待用户连接,而通过accept,获得一个新的套接字,该套接字为连接套接字,通过连接套接字与用户传送数据。何谓惊群:nginx 分为 master 进程 与 worker 进程,worke
2014-01-15 09:55:17 4686 3
哈夫曼树 哈夫曼译码
2010-12-07
paste源代码
2013-06-02
routes源代码
2013-06-01
webob源代码
2013-06-01
C++ STL 模板 析构函数
2013-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人