2018年6月16日

muduo库中的核心:std::bind和std::function

摘要: 最近在读完陈硕大牛的《Linux多线程服务端编程》以及muduo源码后,对其中的一些实现细节有着十分深刻的印象,尤其是使用std::bind和std::function的回调技术。可以说,这两个大杀器简直就是现代C++的“任督二脉”,甚至可以解决继承时的虚函数指代不清的问题。在此详细叙述使用std: 阅读全文

posted @ 2018-06-16 18:53 ukernel 阅读(507) 评论(0) 推荐(2) 编辑

浅析muduo库中的定时器设施

摘要: 一个设计良好的定时器在服务端的应用程序上至关重要,muduo定时器的实现陈硕大牛在书中已经详细的谈过,笔者尝试从源码的角度解读定时器的实现,如果理解不对,欢迎指正。 在muduo的定时器系统中,一共由四个类:Timestamp,Timer,TimeId,TimerQueue组成。其中最关键的是Tim 阅读全文

posted @ 2018-06-16 18:52 ukernel 阅读(465) 评论(0) 推荐(0) 编辑

muduo库中TcpServer一次完整的工作流程

摘要: 模拟单线程情况下muduo库的工作情况 muduo的源代码对于一个初学者来说还是有一些复杂的,其中有很多的回调函数以及交叉的组件,下面我将追踪一次TCP连接过程中发生的事情,不会出现用户态的源码,都是库内部的运行机制。下文笔者将描述一次连接发生的过程,将Channel到加入到loop循环为止。 监听 阅读全文

posted @ 2018-06-16 18:51 ukernel 阅读(1533) 评论(1) 推荐(1) 编辑

浅析muduo库中的线程设施

摘要: muduo是目前我在学习过程中遇到的最具有学习意义的网络库,下文将分析muduo库中的基础设施 Thread和ThreadPool. 首先,介绍在多线程编程中不可缺少的同步措施 Mutex和Condition. + Mutex 有四种操作互斥锁的方式:创建,销毁,加锁,解锁。在muduo中,用一个低 阅读全文

posted @ 2018-06-16 18:49 ukernel 阅读(611) 评论(0) 推荐(0) 编辑

Poll源码剖析

摘要: Poll 函数接口 基本操作 注意事项 是描述符数组, 是监听描述符的个数, 是以毫秒为单位的超时值 返回事件发生的描述符的总数。 使用结束后,用户对刚刚传入的描述符数组进行轮询测试,看看那个pollfd上的事件已经改变了。 POLLHUP 和 POLLHUP 不管有没有设置都是默认监听的。 事件类 阅读全文

posted @ 2018-06-16 18:42 ukernel 阅读(364) 评论(0) 推荐(0) 编辑

select源码剖析

摘要: 条件触发(LT):当条件满足时发生一个IO事件 边缘触发(ET):当状态改变时发生一个IO事件,之后如果不处理,则状态一直维持原样 Select 函数接口 基本操作 注意事项: 参数 描述的是最大的文件描述符+1 如果 指针的为0, 立即返回;如果为NULL,则select永久的阻塞,直到某个文件描 阅读全文

posted @ 2018-06-16 18:41 ukernel 阅读(634) 评论(0) 推荐(0) 编辑

Libevent源码剖析(三)

摘要: 事件集合(struct event_base) 其中有很多的函数已经追踪阅读,但是没有展示,设计思想不难,但是代码由于 define的存在,有点复杂。 Order 0: Order 1: 和`void event_config_free(struct event_config cfg)` Order 阅读全文

posted @ 2018-06-16 18:39 ukernel 阅读(227) 评论(0) 推荐(0) 编辑

Libevent源码剖析(二)之数据结构

摘要: 描述Libevent中出现的数据结构: struct event_base : 事件处理集合 struct event 表示一个具体的事件对象,将IO,超时,信号三者统一起来 struct eventop 对 的操作 struct event_changelist 事件变化的列表,仅由O(1)方法使 阅读全文

posted @ 2018-06-16 18:38 ukernel 阅读(288) 评论(0) 推荐(0) 编辑

Libevent源码剖析(一)之接口详解

摘要: Libevent V2.1版本源码剖析,准备先将提供接口进行分类,根据接口逐步深入源码。 事件集合处理接口(struct event_base) 事件集合处理接口存在两种初始化的方式,一种是直接创建默认的接口,另外一种是根据配置对象创建相应的集合,需要用户额外的维护一个配置对象。 Libevent提 阅读全文

posted @ 2018-06-16 18:37 ukernel 阅读(759) 评论(0) 推荐(0) 编辑

UDT源码剖析(十二)之ACKWindow

摘要: 通过窗口记录发送时间以及ACK接收情况。 CACKWindow 初始化: 更新存储的序列号: 计算目前的带宽: 更新发送时间,发送时调用: 更新接收时间,接收时调用: 记录第一个探测分组到达的时间: 记录第二个探测分组到达的时间以及数据包之间的间隔: 阅读全文

posted @ 2018-06-16 18:33 ukernel 阅读(888) 评论(0) 推荐(0) 编辑

导航