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的协同工作原理
361 0
|
6月前
|
网络协议 Linux API
c++网络库Libevent万字详解
libevent和libev都是c语言实现的异步事件库;通过注册异步事件,库检测事件触发,从而库根据发生事件的先后顺序,调用相应回调函数进行处理;事件包括:网络io事件,定时事件,信号事件;事件循环:等待并分发事件;用于管理事件;libevent 和 libev 主要封装了异步事件库与操作系统的交互;让用户不用关注平台的差异,只需着手事件的具体处理;创建事件处理框架event_base event_base_new()创建新事件event event_new()
214 0
|
6月前
redis7.0源码阅读(一):源码安装(如何去高效阅读源码)
redis7.0源码阅读(一):源码安装(如何去高效阅读源码)
118 0
|
存储 缓存 JavaScript
libevent实战的那些坑
libevent实战的那些坑
403 0
libevent实战的那些坑
|
6月前
|
存储 缓存 JavaScript
深入浅出理解libevent——2万字总结
深入浅出理解libevent——2万字总结
355 0
|
11月前
|
安全 网络协议 Unix
Linux高性能I/O框架库Libevent介绍
Linux高性能I/O框架库Libevent介绍
86 0
|
存储 算法 Java
“JDK简介:探索Java开发的核心工具包“
Java编译器(javac):JDK包含了Java编译器,可以将Java源代码编译为Java字节码。通过编译器,开发人员可以将Java源代码转换为可在JVM上运行的字节码文件。 核心类库(Core Libraries):JDK提供了丰富的核心类库,其中包含了常用的类和接口,用于处理字符串、集合、IO、网络通信等各种操作。开发人员可以利用这些类库来构建功能丰富的Java应用程序。 调试工具(Debugging Tools):JDK提供了一系列的调试工具,例如Java命令行调试器(jdb)、Java虚拟机调试接口(JVMTI)和Java VisualVM等。这些工具可以帮助开发人员查找和修复Jav
211 0
|
算法 Java API
CTK框架介绍和环境搭建
CTK 为支持生物医学图像计算的公共开发包,其全称为 Common Toolkit。CTK插件框架的设计有很大的灵感来自OSGi并且使得应用程序由许多不同的组件组合成一个可扩展模型。这个模型允许通过那些组件间共享对象的服务通信。
507 0
|
存储 负载均衡 Java
Go语言核心手册-6.GMP原理
协程跟线程是有区别的,线程由CPU调度是抢占式的,协程由用户态调度是协作式的,一个协程让出CPU后,才执行下一个协程。
191 0
Go语言核心手册-6.GMP原理