2018年6月16日

《Linux高性能服务器编程》阅读笔记

摘要: bind 成功时返回0,失败时返回 1并设置errno。其中,两种常见的errno是EACCES和EADDRINUSE,他们的含义分别是: EACCES :被绑定的地址是受保护的地址,仅有超级用户可以访问 EADDRINUSE :被绑定的地址正在使用中。 listen 的 backlog 参数表示: 阅读全文

posted @ 2018-06-16 19:29 ukernel 阅读(375) 评论(0) 推荐(0) 编辑

C++标准库(七)之图解bind函数对象

摘要: bind与普通函数的绑定 1. bind可以将用户提供的需要一个参数的函数转换为一个不需要参数的函数对象: 2.使用非成员函数,在使用前和使用时提供参数: bind与类的非静态成员函数的绑定 1.非静态函数成员的使用需要一个隐式的this参数 2.也可以将一个隐式的函数指针显式的传递给需要一个参数的 阅读全文

posted @ 2018-06-16 19:27 ukernel 阅读(512) 评论(0) 推荐(0) 编辑

C++标准库(七)之iterator

摘要: iterator iterator模式:提供一种方法,使之能依次访问容器内的各个元素,而又不暴露该聚合物内部的表述方式。 STL的中心思想是将算法与数据结构分离,彼此独立设计,最后在用iterator将他们结合在一起,获得最大的适配性。 vector 设计理念 vector是动态空间,随着元素的加入 阅读全文

posted @ 2018-06-16 19:24 ukernel 阅读(11027) 评论(0) 推荐(1) 编辑

C++标准库(六)之traits技术

摘要: traits技术 原理:利用template的参数推导机制获取传入的参数型别。 这种程度,依旧会遇到一个问题:如果不是一个class type(比如指针,引用),就无法进行正确的参数推导。可以使用模板偏特化来处理这种情形: 我们需要处理的核心问题: 通过traits技术如何获得iterator描述的 阅读全文

posted @ 2018-06-16 19:21 ukernel 阅读(1012) 评论(0) 推荐(0) 编辑

SGI STL内存管理

摘要: 在SGI STL版本的内存管理中,使用这样一种方式来分配内存: 内存分配+对象初始化 。首先是分配内存,其次是根据对象的类型(是否为POD【Plain of Data】)来使用最有效的方式来初始化对象。回收内存也是用同样的方式: 析构对象+回收内存 ,根据对象是否为POD类型,确定最有效的析构方式。 阅读全文

posted @ 2018-06-16 19:17 ukernel 阅读(214) 评论(0) 推荐(0) 编辑

C++标准库(五)之智能指针源码剖析

摘要: _Mutex_base _Sp_counted_base_Impl _Sp_deleter __shared_count __weak_count __shared_ptr shared_ptr __weak_ptr weak_ptr 类型声明 继承关系 其中,很明显的可以看出,shared_ptr 阅读全文

posted @ 2018-06-16 19:16 ukernel 阅读(1572) 评论(0) 推荐(0) 编辑

C++标准库(四)之String

摘要: String 常见操作 产生C String和字符数组 添加字符 安插字符 删除字符 替换字符 查找 字符串剪切 数值转换 阅读全文

posted @ 2018-06-16 19:07 ukernel 阅读(159) 评论(0) 推荐(0) 编辑

C++标准库(三)之STL算法

摘要: 算法头文件: 算法简介:STL算法采用覆盖模式而非安插模式,所以调用者必须保证有足够的操作空间。 函数对象类型声明: UnaryProc:Op(elem),无返回值 CompFunc:Op(elem1,elem2),返回True或者False UnaryPredicate:Op(elem),返回Tr 阅读全文

posted @ 2018-06-16 19:05 ukernel 阅读(231) 评论(0) 推荐(0) 编辑

C++标准库(二)之容器

摘要: Vector 非更易性操作 元素访问 安插与移除 Deque 双端可变数组 非更易性操作 元素访问 安插与移除 List 双向队列 非更易型操作 元素访问 安插与移除 容器特有操作 非更易型操作 特殊的查找函数 安插与移除 Map Map的Key是常量数据,Value是可更改的,实现方式为红黑树 创 阅读全文

posted @ 2018-06-16 19:01 ukernel 阅读(354) 评论(0) 推荐(1) 编辑

C++标准库(一)之新语言特性

摘要: 新语言特性 nullptr 被解释为一个 ,不同于 NULL 被解释为一个 可以用 auto 在编译期完成自动推导,不会影响执行期的速度 新的 for 循环方式: rvalue reference 也是一个 reference ,也就是说,下面这段代码是无效的: 关键字: expllicit 意味着 阅读全文

posted @ 2018-06-16 19:00 ukernel 阅读(250) 评论(0) 推荐(0) 编辑

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

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

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

浅析muduo库中的定时器设施

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

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

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

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

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

浅析muduo库中的线程设施

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

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

Poll源码剖析

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

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

select源码剖析

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

posted @ 2018-06-16 18:41 ukernel 阅读(614) 评论(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 阅读(224) 评论(0) 推荐(0) 编辑

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

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

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

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

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

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

UDT源码剖析(十二)之ACKWindow

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

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

导航