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库
|
2月前
|
网络协议 调度 开发者
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第27天】本文介绍了Python网络编程中的Twisted框架,重点讲解了其异步IO处理机制。通过反应器模式,Twisted能够在单线程中高效处理多个网络连接。文章提供了两个实战示例:一个简单的Echo服务器和一个HTTP服务器,展示了Twisted的强大功能和灵活性。
52 0
|
8月前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
8月前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
8月前
|
网络协议 Linux API
c++网络库Libevent万字详解
libevent和libev都是c语言实现的异步事件库;通过注册异步事件,库检测事件触发,从而库根据发生事件的先后顺序,调用相应回调函数进行处理;事件包括:网络io事件,定时事件,信号事件;事件循环:等待并分发事件;用于管理事件;libevent 和 libev 主要封装了异步事件库与操作系统的交互;让用户不用关注平台的差异,只需着手事件的具体处理;创建事件处理框架event_base event_base_new()创建新事件event event_new()
265 0
|
存储 缓存 JavaScript
libevent实战的那些坑
libevent实战的那些坑
468 0
libevent实战的那些坑
|
8月前
|
存储 缓存 JavaScript
深入浅出理解libevent——2万字总结
深入浅出理解libevent——2万字总结
466 0
|
安全 网络协议 Unix
Linux高性能I/O框架库Libevent介绍
Linux高性能I/O框架库Libevent介绍
102 0
|
存储 负载均衡 Java
Go语言核心手册-6.GMP原理
协程跟线程是有区别的,线程由CPU调度是抢占式的,协程由用户态调度是协作式的,一个协程让出CPU后,才执行下一个协程。
200 0
Go语言核心手册-6.GMP原理

热门文章

最新文章