E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
libevent源码分析
Libevent源码分析
-----Libevent时间管理
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38661787基本时间操作函数: Libevent采用的时间类型是struct timeval,这个类型在很多平台都提供了。此外,Libevent还提供了一系列的时间操作函数。比如两个structtimeval相加、相减、比较大小。有些平台直接提供了一些时间操作函数,但
luotuo44
·
2014-08-18 15:00
libevent
Libevent源码分析
-----超时event的处理
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38637671如何成为超时event: Libevent允许创建一个超时event,使用evtimer_new宏。//event.h文件 #defineevtimer_new(b,cb,arg)event_new((b),-1,0,(cb),(arg))
luotuo44
·
2014-08-17 11:00
libevent
Libevent源码分析
-----evthread_notify_base通知主线程
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38556059 一般来说,是主线程执行event_base_dispatch函数。本文也是如此,如无特别说明,event_base_dispatch函数是由主线程执行的。notify的理由: 本文要说明的问题是,当主线程在执行event_base_dispatch
luotuo44
·
2014-08-14 21:00
libevent
Libevent源码分析
-----信号event的处理
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38538991信号event的工作原理: 前面讲解了Libevent如何监听一个IO事件,现在来讲一下Libevent如何监听信号。Libevent对于信号的处理是采用统一事件源的方式。简单地说,就是把信号也转换成IO事件,集成到Libevent中。 统一事件源的工
luotuo44
·
2014-08-13 16:00
libevent
Libevent源码分析
-----event优先级设置
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38512719 event_base允许用户对它里面的event设置优先级,这样可以使得有些更重要的event能够得到优先处理。 Libevent实现优先级功能的方法是:用一个激活队列数组来存放激活event。即数组的元素是一个激活队列,所以有多个激活队列。并且规
luotuo44
·
2014-08-12 11:00
libevent
Libevent源码分析
-----Libevent工作流程探究
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38501341之前的博文讲了很多Libevent的基础构件,现在以一个实际例子来初步探究Libevent的基本工作流程。由于还有很多Libevent的细节并没有讲所以,这里的探究还是比较简洁,例子也相当简单。#include#include#include#includevoidcmd_c
luotuo44
·
2014-08-11 22:19
Libevent源码分析
Libevent源码分析
Libevent源码分析
-----Libevent工作流程探究
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/38501341 之前的博文讲了很多Libevent的基础构件,现在以一个实际例子来初步探究Libevent的基本工作流程。由于还有很多Libevent的细节并没有讲所以,这里的探究还是比较简洁,例子也相当简单。#include #include #include #inc
luotuo44
·
2014-08-11 22:00
libevent
Libevent源码分析
-----跨平台Reactor接口的实现
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38458469 之前的博文讲了怎么实现线程、锁、内存分配、日志等功能的跨平台。Libevent最重要的跨平台功能还是实现了多路IO接口的跨平台(即Reactor模式)。这使得用户可以在不同的平台使用统一的接口。这篇博文就是来讲解Libevent是怎么实现这一点的。
luotuo44
·
2014-08-09 17:00
libevent
Libevent源码分析
-----配置event_base
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38443569 前面的博文都是讲一些Libevent的一些辅助结构,现在来讲一下关键结构体:event_base。 这里作一个提醒,在阅读Libevent源码时,会经常看到backend这个单词。其直译是“后端”。实际上其指的是Libevent内部使用的多路I
luotuo44
·
2014-08-08 20:00
libevent
Libevent源码分析
-----event_signal_map
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38424173相关结构体: 因为event_signal_map结构体实在太简单了,所以不像event_io_map那样,有一个专门的文件。由于没有专门的文件,那么只能从蛛丝马迹上探索这个event_signal_map结构了。 通过一些搜索,可以得到与
luotuo44
·
2014-08-07 19:00
libevent
Libevent源码分析
-----event_io_map哈希表
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38403241 上一篇博客说到了TAILQ_QUEUE队列,它可以把多个event结构体连在一起。是一种归类方式。本文也将讲解一种将event归类、连在一起的结构:哈希结构。哈希结构体: 哈希结构由下面几个结构体一起配合工作:structevent_list {
luotuo44
·
2014-08-06 16:00
libevent
Libevent源码分析
-----TAILQ_QUEUE队列
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38374009 Libevent源码中有一个queue.h文件,位于compat/sys目录下。该文件里面定义了5个数据结构,其中TAILQ_QUEUE是使得最广泛的。本文就说一下这个数据结构。队列结构体: TAILQ_QUEUE由下面两个结构体一起配合工作。#
luotuo44
·
2014-08-04 19:00
libevent
Libevent源码分析
-----多线程、锁、条件变量(二)
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38360525Debug锁操作: Libevent还支持对锁操作的一些检测,进而捕抓一些典型的锁错误。Libevent检查:解锁自己(线程)没有持有的锁在未解锁前,自己(线程)再次锁定一个非递归锁。 Libevent通过一些变量记录锁的使用情况,当检查
luotuo44
·
2014-08-03 20:00
libevent
Libevent源码分析
-----多线程、锁、条件变量(一)
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38350633 Libevent提供给用户的可见多线程API都在thread.h文件中。在这个文件提供的API并不多。基本上都是一些定制函数,像前面几篇博文说到的,可以为Libevent定制用户自己的多线程函数。开启多线程: Libevent默认是不开启多线程的,
luotuo44
·
2014-08-02 20:00
libevent
Libevent源码分析
-----内存分配
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38334979 Libevent的内存分配函数还是比较简单的,并没有定义内存池之类的东西。如同前一篇博客那样,给予Libevent库的使用者充分的设置权(定制),即可以设置用户(Libevent库的使用者)自己的内存分配函数。至于怎么分配,主动权在于用户。但在设置(定制
luotuo44
·
2014-08-01 13:00
libevent
Libevent源码分析
-----日志和错误处理
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38317797日志处理: 在Libevent的源码中,经常会见到形如event_warn、event_msgx、event_err之类的函数。这通常出现在代码中一些值是不合理时。这些函数就是Libevent的日志函数。它能把这些不合理的情况打印出来,告知用户。定制日志回
luotuo44
·
2014-07-31 16:00
libevent
Libevent源码分析
-----event-config.h指明所在系统的环境
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38300965 如果你打开Libevent的一些文件,比如util.h文件。就会发现使用了很多宏定义,并根据一些宏定义而进行条件编译。这些宏定义往往来自event-config.h文件中。 如util.h文件的代码开始处:#ifdef_EVENT_HAVE_SYS
luotuo44
·
2014-07-30 15:00
libevent
Libevent源码分析
-----开篇
转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38300779 我所分析的Libevent版本是2.0.21版本,是目前最新的稳定版本。看这系列博文中,需要读者有Linux编程的一些基础。因为像POSIX、文件描述符、多线程等等这些概念,我并不会去解释,我默认读者已经熟悉这些概念了。如果读者读过《UNIX环境高级编程
luotuo44
·
2014-07-30 15:00
libevent
【服务端】
libevent源码分析
原文:http://www.cnblogs.com/hustcat/archive/2010/08/31/1814022.html作者:arrowcat出处:http://www.cnblogs.com/hustcat/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 这两天没事,看了一下Memcached和lib
思月行云
·
2014-07-10 14:40
libevent
libevent源码分析
---让libevent支持多线程
Libevent本身不是多线程安全的,在多核的时代,如何能充分利用CPU的能力呢,这一节来说说如何在多线程环境中使用libevent,跟源代码并没有太大的关系,纯粹是使用上的技巧。1错误使用示例 在多核的CPU上只使用一个线程始终是对不起CPU的处理能力啊,那好吧,那就多创建几个线程,比如下面的简单服务器场景。1主线程创建工作线程1;2接着主线程监听在端口上,等待新的连接;3在线程1中执行e
gsls181711
·
2014-04-02 16:00
网络
线程安全
libevent源码分析
--I/O 定时 信号 被处理的安排
关于这几个事件对应的初何时何地初始化、何时何地事件被添加、何时何地添加到激活队列、处理流程:一、i/o事件 I/O事件的初始化是在event_set函数中被初始化 I/O事件的添加是在event_add函数中进行二、定时事件 定时事件的初始化是在event_add函数中进行,这个函数初始化了一些I/O和定时事件 定时事件添加到激活队列中是使用timeout_p
yusiguyuan
·
2014-03-07 21:00
c
libevent
libevent源码分析
---让libevent支持多线程
Libevent本身不是多线程安全的,在多核的时代,如何能充分利用CPU的能力呢,这一节来说说如何在多线程环境中使用libevent,跟源代码并没有太大的关系,纯粹是使用上的技巧。1错误使用示例 在多核的CPU上只使用一个线程始终是对不起CPU的处理能力啊,那好吧,那就多创建几个线程,比如下面的简单服务器场景。1主线程创建工作线程1;2接着主线程监听在端口上,等待新的连接;3在线程1中执行e
yusiguyuan
·
2014-03-07 20:00
网络编程
libevent
libevent源码分析
--evbuffer和bufferevent的关系
在libevent中还有一个很重要的部分。evbuffer和bufferevent。evbuffer是一个缓冲区,用户可以向evbuffer添加数据,evbuffer和bufferevent经常一起使用,或者说bufferevent使用了evbuffer,bufferevent有两个evbuffer缓冲,还有event。说明bufferevent是一个带有缓冲区的I/O。可以使用它们!用户可以通过
yusiguyuan
·
2014-03-04 20:00
c
网络应用
网络编程
libevent源码分析
--evbuffer缓冲
前言 可以说对于任何网络库(模块)而言,一个缓冲模块都是必不可少的。缓冲模块主要用于缓冲从网络接收到的数据,以及用户提交的数据(用于发送)。很多时候,我们还需要将网络模块层(非TCP层)的这些缓冲数据拷贝到用户层,而这些内存拷贝都会消耗时间。 在这里,我简要分析下libevent的相关代码(event.h和buffer.c)。结构 关于libevent的缓冲模块,主要就是围绕evbuf
yusiguyuan
·
2014-03-04 14:00
c
网络编程
libevent源码分析
---回顾主要的结构体
以前忘记说明,这里源码分析使用的是libevent库的1.4.12-stable版本,在2.0以上的版本都是4W+行,过于庞大,网络上看到关于libevent库中几个重要的结构体关系图,很清楚很好,感谢原作者的细致:(虚线部分代表包含关系)一、tail_queue 关于tail_queue的解释在上篇文章中很细致。二、event //event提供了函数接口,供Reac
yusiguyuan
·
2014-02-23 09:00
libevent
libevent源码分析
-- queue.h中TAILQ_QUEUE的理解
libevent中的例子中使用的是FreeBSD下的queue.h,在linux的/usr/include/sys/queue.h也有该头文件,下tailqueue的定义#defineTAILQ_HEAD(name,type)\ structname{\ structtype*tqh_first;/*firstelement*/\ structtype**tqh_last;/*addroflast
yusiguyuan
·
2014-02-21 17:00
libevent
libevent源码分析
--I/O事件
本文将从一个使用libevent的小例子出发,解释libevent处理事件的流程.例子如下:01.staticvoidfifo_read(intfd,shortevent,void*arg){...} 02. 03.intmain(intargc,char**argv) 04.{ 05.intsocket=open("/tmp/event.fifo",O_RDONLY|O_NONBLOCK,0);
yusiguyuan
·
2014-02-21 12:00
libevent
libevent源码分析
--定时器和信号事件处理
Timer事件反应堆event_base包含了一个最小堆min_heap结构体的实例,以此维护注册到这个反应堆实例的定时器事件:1.structevent_base{ 2.//其他成员 3.structmin_heaptimeheap; 4.};回顾一下最小堆min_heap:1.typedefstructmin_heap 2.{ 3.//p指向一个动态分配的数组,数组元素是event指针. 4.
yusiguyuan
·
2014-02-21 11:00
libevent
libevent源码分析
--libevent库对信号事件的处理
信号的处理在libevent中也是一个很重要的部分,同时处理的也很巧妙,这里根据自己的理解分析其堆信号的处理。和信号相关的几个重要API都是如何调用的。这是网上关于libevent处理信号的过程图解(感谢原作者,由这个图来分析libevent如何处理信号的)一、evsignal_init()函数(这里的分析都是按照IO复用机制的epOLL) 这个信号初始化在epoll_init函数中,这
yusiguyuan
·
2014-02-20 21:00
libevent
libevent源码分析
--如何将定时器和信号事件都集合到I/O复用中
我的理解: 在I/O多路复用机制用(这里使用epoll作为例子),epoll_wait在一定的时间内监听需要受到关注的套接字,如果只是关注I/O事件,这样就会很简单,在设置时间的时候没有任何限制,此函数返回后,得到的有事件的套接字的个数,在libevent中使用的event_base_loop这个函数打到这个目的的,里面的evse->dispatch()这个函数就是epoll_wait的
yusiguyuan
·
2014-02-18 21:00
libevent
libevent源码分析
---时间管理模块
一、在event_base_loop()函数中有和时间相关的部分: 其中tv_cache用来记录时间缓存的,base->tv_cache.tv_sec=0;在这里讲时间缓冲清空,在while()循环中,首先校正时间(timeout_correct(base,&tv);),这个校正是存在目的的,接下来再介绍,时间校正结束再在最小堆中找最小时间,使用的函数为timeout_next,这个时
yusiguyuan
·
2014-02-18 19:00
C++
libevent
libevent源码分析
之 tail queue
最近开始学习libevent源码,发现其存储各种event的队列用的是OpenBSD:queue.h的带有尾节点信息的队列实现(带有尾节点是显然的,这样插入节点的时候不用从头开始遍历,只要o(1)时间即可),该实现用一系列宏实现的队列数据结构的抽象和范型,发现其实现的确实很精妙,于是就深入进去学习其实现,以备在以后的项目中使用。 tailqueue涉及以
笃行之
·
2014-01-26 17:00
源码分析
队列
libevent
libevent源码分析
--epoll_dispatch()
这个函数是相当于在event_dispatch()中调用的那个函数的真实面目,传递给这个函数的参数中有event_base,还有一个arg买这个arg在这里就是struct epollop.还有一个时间值。staticint 192epoll_dispatch(structevent_base*base,void*arg,structtimeval*tv) 193{ 194structepollo
yusiguyuan
·
2014-01-14 17:00
libevent
libevent源码分析
--epoll_add()函数
首先看看add函数实在event_add函数中调用的,肯定是evsel->add的方式调用的。259staticint260epoll_add(void*arg,structevent*ev)261{262 structepollop*epollop=arg;263 structepoll_eventepev={0,{0}};264 structevepoll*evep;265
yusiguyuan
·
2014-01-14 17:00
libevent
libevent源码分析
--epoll中的几个函数 epoll_init epoll_add epoll_dispatch
这篇文件讲解下上面的几篇文章中欠下的几个函数解释。在看这个之前,请移步这篇文章这里说明了libevent库在编译的时候已经决定了所使用的I/O复用机制,系统中提供了五种机制:在这里指选择一种来说明epoll在even-internal.h文件中有一个结构体,38structeventop{ 39constchar*name; 40void*(*init)(structevent_base*); 4
yusiguyuan
·
2014-01-14 16:00
libevent
libevent源码分析
--event_add()函数
event_add是第三个函数,函数参数ev是指向要注册的事件,tv是超时时间,函数将ev注册到ev->ev_base上,事件类型由ev->ev_events指明。如果注册成功,ev讲被插入到已经注册链表中,如果tv不是null,则会同时注册定时事件,将ev添加到timer堆上,其中的巧妙之处请看以下分析int 720event_add(structevent*ev,conststructtime
yusiguyuan
·
2014-01-13 22:00
libevent
libevent源码分析
--event_set()函数
如果按照正常使用libevent库的流程来说,首先调用event_init()函数,然后调用event_set()函数,然后event_add()函数,然后是event_dispatch()函数。1、event_init()创建一个event_base对象也就是创建一个新的libevent实例,该函数同时还堆新生成的libevent实例进行了初始化。首先为event_base实例申请了空间,然后初
yusiguyuan
·
2014-01-13 22:00
libevent
libevent源码分析
--event_init()函数
尝试着解释几个重要的函数,首先是event_inint()函数,这个函数式最初就需要使用的函数,此函数初始化了一个全局的变量current_base,也就是event_base,默认情况下所有的event都是在想这个变量中添加。structevent_base*event_init(void) { structevent_base*base=event_base_new(); if(base!=
yusiguyuan
·
2014-01-13 21:00
libevent
libevent源码分析
--事件处理框架
前面已经对libevent的事件处理框架和event结构体做了描述,现在是时候剖析libevent对事件的详细处理流程了,本节将分析libevent的事件处理框架event_base和libevent注册、删除事件的具体流程,可结合前一节libevent对event的管理。1事件处理框架-event_base回想Reactor模式的几个基本组件,本节讲解的部分对应于Reactor框架组件。在lib
yusiguyuan
·
2014-01-13 11:00
libevent
libevent源码分析
--核心部分event
对事件处理流程有了高层的认识后,本节将详细介绍libevent的核心结构event,以及libevent对event的管理。1libevent的核心-eventLibevent是基于事件驱动(event-driven)的,从名字也可以看到event是整个库的核心。event就是Reactor框架中的事件处理程序组件;它提供了函数接口,供Reactor在事件发生时调用,以执行相应的事件处理,通常它会
yusiguyuan
·
2014-01-13 10:00
libevent
libevent源码分析
--代码结构
Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于libevent的两个实用库等几个部分,有些部分可能就是一个源文件。源代码中的test部分就不在我们关注的范畴了。1)头文件主要就是event.h:事件宏定义
yusiguyuan
·
2014-01-13 10:00
libevent
libevent源码分析
---基本使用场景和事件流程
基本使用场景和事件流程当应用程序向libevent注册一个事件后,libevent内部是怎么样进行处理的呢?下面的图就给出了这一基本流程。1) 首先应用程序准备并初始化event,设置好事件类型和回调函数;这对应于event_set()和event_base_set()两个函数;2) 向libevent添加该事件event。对于定时事件,libevent使用一个小根堆管理,key为超时时间;对于S
yusiguyuan
·
2014-01-13 10:00
libevent
libevent源码分析
--事件处理框架
前面已经对libevent的事件处理框架和event结构体做了描述,现在是时候剖析libevent对事件的详细处理流程了,本节将分析libevent的事件处理框架event_base和libevent注册、删除事件的具体流程,可结合前一节libevent对event的管理。1事件处理框架-event_base回想Reactor模式的几个基本组件,本节讲解的部分对应于Reactor框架组件。在lib
yusiguyuan
·
2013-12-18 12:00
libevent
libevent0.1&0.2源码理解(一)类型与变量
网上libevent的中文文档不是很少,其中 张亮写的
libevent源码分析
写得不错。但是当时的1.4版本篇幅还是过长,本文将浅析libevent的0.1及0.2版本,其中体
luozhaoyu
·
2012-03-28 17:00
libevent
libevent数据结构
libevent源码分析
这两天没事,看了一下Memcached和libevent的源码,做个小总结。 1、入门1.1、概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: (1)事件驱动(event-driven),高性能;(2)轻量级,专注于网络,不如ACE那么臃肿庞大; (3)源代码相当精炼、易读; (4)跨平台,支持Windo
tianmo2010
·
2011-09-11 13:00
thread
多线程
编程
function
Semaphore
input
libevent源码分析
这两天没事,看了一下Memcached和libevent的源码,做个小总结。 1、入门1.1、概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点:(1)事件驱动(event-driven),高性能;(2)轻量级,专注于网络,不如ACE那么臃肿庞大;(3)源代码相当精炼、易读;(4)跨平台,支持Window
YY哥
·
2010-08-31 20:00
Libevent 源码分析(原创)
Libevent源码分析
作者:余超E-MAIL:
[email protected]
是一个开源的,跨平台的事件接口封装处理库,Libevent相对于ACE来说轻量多了,ACE用了很多设计模式的思想来封装过
CYBEREXP2008
·
2010-06-17 09:00
libevent源码分析
from:blog.csdn.net/karlxu/archive/2007/09/30/1808095.aspx libevent实现了网络IO,timer,signal的事件触发机制.可以很方便的应用于event-driven服务器中,作为其底层事件处理模块.比较成功的案例有memcache(分布式缓存),PLB(负载均衡器)等. 最近研究了一下libevent的源码,版本是1.3b,可以大概
freezgw1985
·
2010-05-15 17:00
struct
buffer
callback
引擎
Signal
pair
libevent源码分析
libevent实现了网络IO,timer,signal的事件触发机制.可以很方便的应用于event-driven服务器中,作为其底层事件处理模块.比较成功的案例有memcache(分布式缓存),PLB(负载均衡器)等. 最近研究了一下libevent的源码,版本是1.3b,可以大概分成几个模块:♦事件处理框架♦事件引擎模块♦Buffer管理模块♦信号处理模块 1.事件处理框架1.1event_
eroswang
·
2009-11-04 09:00
struct
buffer
callback
引擎
Signal
pair
libevent源码分析
libevent实现了网络IO,timer,signal的事件触发机制.可以很方便的应用于event-driven服务器中,作为其底层事件处理模块.比较成功的案例有memcache(分布式缓存),PLB(负载均衡器)等. 最近研究了一下libevent的源码,版本是1.3b,可以大概分成几个模块:♦事件处理框架♦事件引擎模块♦Buffer管理模块♦信号处理模块 1.事件处理框架1.1event_i
rufeng18
·
2009-03-01 12:00
struct
buffer
callback
引擎
Signal
pair
上一页
1
2
3
4
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他