Libevent 是一个事件驱动框架, 不能仅说他是一个网络库。
notejs就是采用与libevent类似的libev来做核心驱动的。
 
Libevent支持三种事件:io事件、信号事件、时间事件,并且事件的设置和使用方式是一样的。
libevent的核心原理是采用io多路复用的方式来单线程处理事件。至于为什么这么说,下面会分别对三种时间进行解释。
 
io事件: io事件包含socket可读、可写、断开、设备可读、可写等和IO相关的事件, libevent主要采用了epoll模型来进行i/o事件的多路复用(我说的是linux上,libevent也封装了select,poll模型,下面仅说采用epoll的情况)。 一句话解释epoll模型:就是在内核管理的设备或者资源上设置等待队列,当资源出现的时候,系统会通知epoll_wait唤醒,进行事件的处理。 总的来说, i/o事件的事件驱动依赖于操作系统。
 
时间事件: 时间事件,可以简单的解释一下, 如果我们想在500ms后执行一段代码,那么,就可以在libevent上面设置一个时间事件,代码封装到回调函数里面去。 如果看过epoll或者select的使用方式,你就会知道epoll_wait可以设置一个timeout,等待timeout这个时长,如果没有事件发生,也会返回。时间事件的处理就 将所有时间事件要等待时间最少的设置为timeout时间,这样,即使什么i/o事件也没有发生,也能在timeout后,处理该处理的时间事件。
 
信号事件: 简单的解释一下, 即使和i/o无关,也可以作为一个事件进行处理,信号的意思可以理解为一个字符串,例如当A发出一个“hello”,B注册了当收到“hello”事件的时候,就会执行一个函数。 其原理是, 将信号事件这种和I/O无关的事件转换为和I/O有关的,充分利用现有模型统一处理。事实上, 信号事件是采用一个client socket 和一个server socket, client socket只能写, server socket只能读, server sockert将recv到的client socket的文件描述符放到了epoll的事件集合中, 永远不删。 当发送信号的时候, 通过client socket进行发送, server socket收到数据,就会触发epoll_wait唤醒,如果发现这是server socket的事件,就会对信号事件进行遍历找到那个等待的。
 
 
事件的结构:
 
时间事件:采用最小堆组织, 时间最少的在顶部, 插入和删除都是log(N),主要是方便找到最小等待时间,方便设置time_out时间。
I/O事件:双向链表。
信号事件: 双向链表
 
 
 
激活事件:是libevent 的epoll_wait唤醒后,得到的所有要处理的事件双向链表。
 
主循环:
libevent采用一个主循环来处理所有事件处理和事件等待。

最新文章

  1. python——线程与多线程进阶
  2. python的最最最最最基本语法(2)
  3. ajax分页2:jquery.pagination +JSON 动态无刷新分页
  4. javascript whenReady
  5. 【转】最短路&差分约束题集
  6. PHP读书笔记(6)- 数组
  7. 【Java基础】继承的一些总结
  8. phpcms v9自定义表单提交后返回上一页实现方法
  9. IDF实验室解题学习笔记1
  10. Hanoi汉诺塔问题——递归与函数自调用算法
  11. 十大ios开发者喜爱的开源库
  12. Python设计模式 - UML - 组合结构图(Composite Structure Diagram)
  13. Android 出现 activity supporting action_view is not set as browsable报错
  14. java8新特性(二)_lambda表达式
  15. POJ 2664
  16. PHP错误和异常处理
  17. 查询中mybatis的if判断里传入0
  18. USACO 6.5 The Clocks
  19. java spring boot 出现 java.lang.UnsatisfiedLinkError
  20. sysstat 工具

热门文章

  1. flash导入图片缩放后出现毛边、失真、锯齿、文字模糊不清晰的情况
  2. C#异步Socket示例
  3. jquery抖动的按钮
  4. ssis的script task作业失败(调用外部dll)
  5. nginx+lua+redis高并发应用建设
  6. 数据结构栈的java实现
  7. Windows Forms框架编程
  8. python实现变参
  9. Python:Module Install Issues
  10. MVC一些需要注意的问题