FreeeLinux's blog

没有迷路的人

红黑树的插入与删除算法

一:旋转操作 将几种情况之前先看一下旋转操作。 1.rotate_left 代码如下: void rb_tree::rotate_left(node_type* x) //x is the rotate point { assert(x != nil_); nod...

2016-10-29 22:43:33

阅读数 556

评论数 0

redis入门笔记

我将自己今天一天所学到关于redis的重点写在这里。 1.expire name 2    设置2秒过期,单位为seconds 2.ttl name  查看生命期 3.exists name 查看是否存在 4.expire name 1477571450 利用时间戳设置过期,...

2016-10-27 22:47:11

阅读数 345

评论数 0

muduo库的ThreadPool剖析

先上代码,然后分析: ThreadPool.h #ifndef MUDUO_BASE_THREADPOOL_H #define MUDUO_BASE_THREADPOOL_H #include #include #include #include #include #include ...

2016-10-26 20:03:25

阅读数 1151

评论数 0

google的protobuf用法

一:安装 地址是:https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz,wget一下就可以了。 然后就是安装三部曲:1. ./configure  2.make   3.make ch...

2016-10-25 19:06:29

阅读数 365

评论数 0

muduo的Mutex类剖析

muduo的mutex_lock_guard()就是利用C++的RAII机制,完成互斥锁锁的自动加锁,解锁操作,解放双手。我们只需要用一堆大括号的控制互斥锁的范围就可以了。 RAII(Resource Acquisition Is Initialization),也称为“资源获取就是初始化”,是C...

2016-10-25 00:53:37

阅读数 1065

评论数 0

muduo库Thread类剖析

muduo库中的Thread类集合了所有线程的操作,其中还运用了线程安全的观察者模式。 运用shared_ptr和weak_ptr做到了生命周期的管理。 代码加注释如下: Thread.h #ifndef MUDUO_BASE_THREAD_H #define MUDUO_BASE_THREAD_...

2016-10-24 22:49:13

阅读数 1085

评论数 0

利用backtrace函数打印函数调用栈

我们一般打印函数调用栈可以选择GDB的backtrace命令,简写bt命令都可以。这里有一个新的方法,那就是利用backtrace函数打印,不过还要加上backtrace_symbols()函数。 int backtrace(void **buffer, int size) 该函数用于获取当前...

2016-10-24 13:05:17

阅读数 2500

评论数 0

TCP_NODELAY和KEEP_ALIVE

TCP_NODELAY和Nagle算法有关,关系如下: TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每...

2016-10-23 22:10:44

阅读数 552

评论数 0

Docker入门笔记

一:什么是Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。 Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是Docke...

2016-10-23 10:16:47

阅读数 453

评论数 0

libevent的bufferevent剖析

1.什么是bufferevent libevent为输入输出缓冲区做出了一个抽象,这个抽象就是bufferevent。用来自动管理输入输出缓冲区,我们要输入输出就可以对bufferevent操作了。有数据写入bufferevent时,添加数据到输出缓冲区。bufferevent有数据供读取的时候,...

2016-10-21 18:59:16

阅读数 1399

评论数 0

vagrant配置linux以及nginx开发环境

一:安装Vagrant Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。 所以,为了不想让我的vmware累死我的电脑,不想一遍又一遍的配置环境,我决定用vagrant了。 1.安装...

2016-10-20 19:32:48

阅读数 2372

评论数 0

libevent的min_heap剖析

libevent到现在我已经剖析了8天了,有的心得写到了博客,有的没写,以后会慢慢更新。 这次剖析libevent的min_heap,用来存放定时时间,它是一个最小堆构成的优先级队列,这样能保证我们每次取得超时时间最小的事件,按顺序处理。 一切尽在不言中,给上代码,有注释。 #ifndef _MI...

2016-10-17 21:21:51

阅读数 775

评论数 0

libevent的epoll模式剖析

接着上次的进度,上次剖析了事件处理框架,这次来剖析一下libevent的epoll模式是怎样实现的。 首先来看evepoll结构体: struct evepoll { //epoll的读写操作 struct event *evread; struct event *evwrite...

2016-10-17 14:17:10

阅读数 1664

评论数 0

libevent的event处理框架剖析

前几次剖析了libevent的tail queue和evbuffer,今天来剖析一下它的事件处理框架。这个在剖析evbuffer之前已经大致走过几遍,但思路不是很清晰,是因为我没有用实例去测试event流程。通过这次我学习到了剖析源码不仅要去看源码,而且你要测试它这项接口是怎么用的,不然只会似懂非...

2016-10-14 13:33:49

阅读数 4104

评论数 1

libevent的evbuffer详解(含源码详细注释+测试用例)

前天剖析了libevent的事件链表tail queue,今天来剖析一下它的evbuffer。 evbuffer是libevent中的缓冲区模块,支持读写数据,尤其是可以按行读取。特别是TCP这种基于字节流的数据,需要从字节流解析自己的通讯协议,借助缓冲区保存 多余的数据,以便和下一次独到的数据合...

2016-10-12 20:44:10

阅读数 4676

评论数 0

libevent中的tail queue详细分析

libevent库中第一个出现的问题就是它的event结构体用了tail queue,这个结构是在linux的/usr/include/sys/queue.h有定义,libevent库中防止未定义又定义了一遍。 queue.h定义如下: #define TAILQ_HEAD(nam

2016-10-10 21:13:34

阅读数 1443

评论数 0

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