libev 学习笔记之主体事件循环

本文介绍了libev如何在Linux环境下利用epoll进行事件循环的封装,包括epoll_create、epoll_ctl和epoll_wait等关键函数的使用,以及libev的多事件循环机制和ev_wrap.h文件中的宏定义,揭示了libev如何在多线程环境中支持并发模型。
摘要由CSDN通过智能技术生成

一. epoll简介

作为linux下的IO多路复用神器,一经问世便得到了众多程序员的赞赏,其出色的绑定 fd 监听事件能力使其在有 x 个事件同时触发时能够在O(x)时间内处理到激活的事件,此非select和poll所能比。
在linux环境下,使用epoll作为libev的后端支持是极好的选择。

二. libev中对epoll的封装

1. ev_epoll.c文件

libev能够在编译时依赖系统的宏定义来自动选择恰当的后端事件循环支撑。linux下,首选epoll。libev对epoll进行了一次简单的封装,代码位于ev_epoll.c文件。

2. 主要使用的epoll相关函数

  1. epoll_create

    epoll_create() returns a file descriptor referring to the new epoll instance. This file descriptor is used for all the sub‐sequent calls to the epoll interface. When no longer required, the file descriptor returned by epoll_create() should be closed by using close(2). When all file descriptors referring to an epoll instance have been closed, the kernel destroys the instance and releases the associated resources for reuse.

    一言以蔽之: 这个系统调用会在创建一个epoll实例,返回一个与该实例相关连的 epfd 供后续epoll类函数调用

  2. epoll_ctl

    This system call performs control operations on the epoll(7) instance referred to by the file descriptor epfd. It requests that the operation op be performed for the target file descriptor, fd.

    一言以蔽之: 这个系统调用用来往 epoll_create 返回的 epfd 相关联的epoll实例内 添加/修改/删除监听事件

  3. epoll_wait

    The epoll_wait() system call waits for events on the epoll(7) instance referred to by the file descriptor epfd. The memory area pointed to by events will contain the events that will be available for the caller. Up to maxevents are returned by epoll_wait(). The maxevents argument must be greater than zero.

    一言以蔽之: 此系统调用用来等待通过 epoll_ctl 往 epfd 相关的 epoll 实例内添加的事件就绪

3. epoll封装函数分析

a. epoll_modify

函数原型: void epoll_modify (EV_P_ int fd, int oev, int nev)
函数说明: 用来往epoll中添加或修改 fd关联的事件
参数说明: EV_P_宏留在下文介绍,fd 即为往epoll中待添加或修改事件所关联的fd,oev为old event,nev为new event
功能实现: 调用epoll_ctl来实现添加/修改
核心代码:

struct epoll_event ev;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值