10 2017 档案

摘要:激活事件添加流程 事件发生后,需要把对应的event加入到激活事件队列中。 整个流程如下: 对于定时器事件,在timeout_process过程中,会将事件从最小堆中删除。 激活事件处理流程 在even_base_loop中,底层dispatch返回后的核心问题就是处理激活事件。 简单分析下even 阅读全文
posted @ 2017-10-23 10:10 Sawyer Ford 阅读(715) 评论(0) 推荐(0)
摘要:libevent通过socketpair实现对信号事件的监听。 还记得event_base吗? evsig_info结构如下: evsig_init 在event_base初始化阶段会完成socketpair的创建。 可以看到,sig.ev_signal关联了sig.ev_signal_pair[1 阅读全文
posted @ 2017-10-20 11:36 Sawyer Ford 阅读(2011) 评论(0) 推荐(0)
摘要:libevent是如何实现事件监听的呢? 在Linux,libevent的底层实现是epoll,因此实现事件监听的方式就是,把需要监听的fd加入epoll中。 I/O事件 定时器事件 定时器事件没有fd,那么如何监听呢? 这里先看下epoll_wait这个函数 libevent采用的方法是:每次运行 阅读全文
posted @ 2017-10-20 09:19 Sawyer Ford 阅读(510) 评论(0) 推荐(0)
摘要:A Tour of Go Go编程基础 Go 语言圣经 中文版 阅读全文
posted @ 2017-10-17 21:07 Sawyer Ford 阅读(251) 评论(0) 推荐(0)
摘要:libevent使用struct event来表示一个事件。 具体字段含义不再细说,可参考event_assign进行理解。 int event_assign(struct event *ev, struct event_base *base, evutil_socket_t fd, short e 阅读全文
posted @ 2017-10-17 17:30 Sawyer Ford 阅读(384) 评论(0) 推荐(0)
摘要:接上文libevent(三)event_base event_io_map event_list是双向链表,min_heap是小根堆,那event_io_map是什么呢? 在Linux系统中,event_io_map就是event_signal_map。 event_signal_map 上一张镇楼 阅读全文
posted @ 2017-10-17 13:54 Sawyer Ford 阅读(279) 评论(0) 推荐(0)
摘要:libevent能够处理三种事件: I/O、定时器、信号。 event_base 统一管理所有事件。 eventop 用于描述event_base的底层实现机制 libevent支持多种平台,因此定义了一个全局数组来存放多个eventop。 Linux平台的I/O多路复用机制是epoll,对应epo 阅读全文
posted @ 2017-10-17 10:38 Sawyer Ford 阅读(749) 评论(0) 推荐(0)
摘要:本文主要研究libevent中用来存储事件的两个结构体。 尾队列 具体定义位于queue.h中。 从定义可以看出,尾队列是一个双向链表,具体表现为: 一个小DEMO: #include <stdio.h> #include <stdlib.h> #include <sys/queue.h> #def 阅读全文
posted @ 2017-10-17 09:44 Sawyer Ford 阅读(1051) 评论(0) 推荐(0)
摘要:开始研究libevent,使用的版本是2.0.22。 实现一个定时器:每2秒执行一次printf。 参考资料: libevent分析 - sparkliang的专栏 - 博客频道 - CSDN.NET Libevent源码分析 - luotuo44的专栏 - 博客频道 - CSDN.NET 阅读全文
posted @ 2017-10-17 09:34 Sawyer Ford 阅读(2698) 评论(0) 推荐(0)
摘要:TCP报文段首部 序号: TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。 例如,一报文段的序号字段值是301,而携带的数据共有100字节。这就表明:本 阅读全文
posted @ 2017-10-15 18:53 Sawyer Ford 阅读(374) 评论(0) 推荐(0)
摘要:网络协议栈 数据封装过程 TCP和UDP的区别 1. TCP是面向连接的,UDP不是面向连接的。 2. TCP是可靠的,UDP是不可靠的。 3. TCP是面向字节流的,UDP是面向报文的 UDP对应用层交下来的报文,既不合并,也不拆分,有多长发多长,即一次发送一个报文。TCP把应用程序交下来的数据看 阅读全文
posted @ 2017-10-15 15:09 Sawyer Ford 阅读(141) 评论(0) 推荐(0)