libevent/libev框架实战

简介: libevent/libev框架实战

       libevent是一个事件通知库,需要编译成动态库或静态库,不能单独启动,封装了reactor;reactor中的io,事件以及他们之间的关系是怎样的呢?

       reactor中的io分为io检测,io操作;reactor的主体思想是将网络io的处理转化为对事件的处理,事件分为读事件和写事件;io是同步,事件是异步的;事件先要注册,然后有事件循环去检测事件是否就绪,如果就绪才会处理事件;

libevent使用层次

       1)在事件中是否需要自己处理io,基于libevent对事件的处理;

       2)libevent内部处理io,只需要负责业务逻辑的处理;

       3)事件处理流程需要熟悉;

封装层次

       面向用户使用框架,提供相关接口;

libevent解决了哪些痛点

       1)高效的网络缓冲区,通过readv和writev函数可一次读写多个数组;

       2)io函数使用与网络原理;

       3)多线程,buffer加锁时,读要读取一个完整的包,写要写完整的数据包,通过readv和writev函数可一次读写多个数组;

write(fd, buff, 1024);系统调用流程:用户态调用write,write是标准库函数,write是软中断,会调用system_call,system_call会记录系统调用号存入exa寄存器中,会调用int 0x80中断,int 0x80中断会引起cpu上下文环境保存到内核中的task_struct结构中,为什么write会需要上下文切换呢?因为write实际做的工作不是在用户态完成的,而是在内核态完成的,所以要通过int 0x80中断切换到内核态,内核会把要运行的上下文加载到cpu的寄存器上,接下来调用就进入了内核内部,内核内部会调用sys_write函数,sys_write是根据系统调用号找到向量表,从向量表中查找sys_write函数,就开始执行该函数,执行sys_write函数时分阻塞io和非阻塞io,阻塞io可能还会引起线程切换;非阻塞io不会引起线程切换,把数据发送出去后,会调用中断由内核态切换到用户态;

目录
相关文章
|
XML 编解码 自然语言处理
不需要熟悉,但需要了解的libiconv库
但是很多老式的计算机还在使用当地的传统的字符编码方式。而一些程序,例如邮件程序和浏览器必须能在这些不同的用户编码之间作转换。其他的一些程序则内置支持Unicode,以顺利支持国际化的处理,但是仍然有在Unicode和其他的传统编码之间转换的需求。GNU的libiconv就是为这两种应用设计的编码转换库。
不需要熟悉,但需要了解的libiconv库
|
6月前
|
设计模式 算法 中间件
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI Core与CommonAPI DBus的协同工作原理
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI Core与CommonAPI DBus的协同工作原理
346 0
|
6月前
|
网络协议 Linux API
c++网络库Libevent万字详解
libevent和libev都是c语言实现的异步事件库;通过注册异步事件,库检测事件触发,从而库根据发生事件的先后顺序,调用相应回调函数进行处理;事件包括:网络io事件,定时事件,信号事件;事件循环:等待并分发事件;用于管理事件;libevent 和 libev 主要封装了异步事件库与操作系统的交互;让用户不用关注平台的差异,只需着手事件的具体处理;创建事件处理框架event_base event_base_new()创建新事件event event_new()
196 0
|
6月前
|
存储 缓存 JavaScript
深入浅出理解libevent——2万字总结
深入浅出理解libevent——2万字总结
338 0
|
11月前
|
安全 网络协议 Unix
Linux高性能I/O框架库Libevent介绍
Linux高性能I/O框架库Libevent介绍
84 0
|
开发框架 移动开发 网络协议
php进阶编程-easyswoole框架的学习和开发
php进阶编程-easyswoole框架的学习和开发
163 0
php进阶编程-easyswoole框架的学习和开发
|
存储 负载均衡 Java
Go语言核心手册-6.GMP原理
协程跟线程是有区别的,线程由CPU调度是抢占式的,协程由用户态调度是协作式的,一个协程让出CPU后,才执行下一个协程。
189 0
Go语言核心手册-6.GMP原理
|
负载均衡 网络协议 C++
VS2010下libevent的如何使用
VS2010下libevent的如何使用
250 0
VS2010下libevent的如何使用
|
消息中间件 网络协议