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不会引起线程切换,把数据发送出去后,会调用中断由内核态切换到用户态;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值