libev 是 一种 “事件驱动”的编程框架,所谓“事件驱动”,简单地说就是就是 有什么动作(点按钮、中断),程序就执行什么操作(中断服务函数、回调函数),当然事件不仅限于用于的操作,只要是定义好的,各种突发、预设的各种将要发生的事情,都是事件。这里,我对CPU相对熟悉一些,可以把“事件驱动”理解为 自定义软件中断。这里我们举几个案例来分析:
案例1: 状态机FSM
状态机是一种常用的编程框架,本质上讲,状态机也是一种事件驱动,“状态”就相当于“事件”,不同状态执行不同的代码功能,这里的代码功能就相当于 事件对应的 驱动 功能。
案例2:硬件中断
硬件中断是 最典型的 事件驱动,只不过这里的中断是CPU厂家预设的,当发生某一硬件中断时,执行对应的 中断服务函数,这里的 “中断”就是 “事件”,而 中断服务函数 就是 驱动。
案例3:功能 回调函数
我们在使用 一些 SDK 的时候,很多的SDK 都会提供 接口 和回调函数,这种回调 函数 也是事件驱动模型,只不过这些 事件 是SDK 定义好的,回调函数 是允许用户 自定义的 事件驱动 函数。
libev 提供了基本的 IO 事件、定时器事件、信号事件,这三种事件用的比较多,这里的IO就是针对 文件描述符,在Linux下,一切设备都是 文件,所以 IO 事件可以针对 所有的外设备,比如网口、socket,串口,文件等。定时器 事件可以实现周期 动作,这个用的也比较多,信号 事件 可以帮助 程序更加的稳定运行。除了这些事件,还提供 周期事件、子进程事件、文件状态改变事件等多种事件。具体的,我们在后面的文章再 进一步的解释。