Libevent的使用及reactor模型

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。

libevent的流程可以分为三步:定义框架,注册事件,启动事件循环(epoll检测事件是否发生,发生的时候,通知子线程调用回调函数//此过程会阻塞)下图为编写的框架

cpp 复制代码
  // 创建框架  
  struct event_base* base = NULL;
    base = event_base_new();

  
// 添加事件
    struct event* ev = NULL;
    ev = event_new(base, fd, EV_READ | EV_PERSIST, read_cb, NULL);

    event_add(ev, NULL);

    // 事件循环
    event_base_dispatch(base);

    // 释放资源
    event_free(ev);
    event_base_free(base);
    close(fd);
    
    return 0;
}

Reactor:事件源(描述符)、Reactor 框架、多路复用机制和事件处理程序

事件源可以理解为我们的文件描述符,多路复用机制是我们的IO模型(select,poll,epoll),事件处理程序理解为回调函数。

相关推荐
poemyang7 天前
职责分离的艺术:剖析主从Reactor模型如何实现极致的并发性能
rpc·reactor·事件驱动
poemyang8 天前
从C10K到Reactor:事件驱动,如何重塑高并发服务器的网络架构
rpc·reactor·事件驱动
deng-c-f9 天前
Linux C/C++ 学习日记(22):Reactor模式(二):实现简易的webserver(响应http请求)
linux·c语言·网络编程·reactor·http_server
Ytadpole25 天前
性能革命的底层逻辑:深入理解 Spring Cloud Gateway 的 Reactor 核心
java·spring·gateway·reactor·响应式编程·cloud
想睡hhh1 个月前
网络实践——基于epoll_ET工作、Reactor设计模式的HTTP服务
网络·http·设计模式·reactor·epoll
fire-flyer1 个月前
响应式客户端 WebClient详解
java·spring·reactor
liulilittle3 个月前
C++ Proactor 与 Reactor 网络编程模式
开发语言·网络·c++·reactor·proactor
贾修行3 个月前
深入浅出理解 Reactor:响应式编程的利器
java·reactor
Once_day3 个月前
Libevent(3)之使用教程(2)创建事件
开发语言·c·libevent
jjkkzzzz6 个月前
基于libevent的异步事件驱动型线程池实现
线程池·libevent·c/c++