libevent,libev,libuv
libevent,libev,libuv都是c实现的异步事件库,注册异步事件,检测异步事件,根据事件的触发先后顺序,调用相对应回调函数处理事件。处理的事件包括:网络 io 事件、定时事件以及信号事件
。这三个事件驱动着服务器的运行。
1. 网络io事件:
linux:epoll、poll、select
mac:kqueue
window:iocp
2. 定时事件:
红黑树
最小堆:二叉树、四叉树
跳表
时间轮
3. 信号事件
libevent 和 libev 主要封装了异步事件库与操作系统的交互简单的事件管理接口,让用户无需关注平台检测处理事件的机制的差异,只需关注事件的具体处理。
从设计理念出发,libev 是为了改进 libevent 中的一些架构决策;例如:全局变量的使用使得在多线程环境中很难安全地使用 libevent;event 的数据结构设计太大,它包含了 io、时间以及信号处理全封装在一个结构体中,额外的组件如 http、dns、openssl 等实现质量差(容易产生安全问题),计时器不精确,不能很好地处理时间事件;
libev 通过完全去除全局变量的使用,而是通过回调传参来传递上下文(后面libevent也这样做了);并且根据不同事件类型构建不同的数据结构,以此来减低事件耦合性;计时器使用最小四叉堆。libev 小而高效;只关注事件处理。
libevent 和 libev 对 window 支持比较差,由此产生了 libuv 库;libuv 基于 libev,在window 平台上更好的封装了 iocp;node.js 基于 libuv;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-12-29 acc 检测引脚
2022-12-29 XF6000 科大讯飞
2022-12-29 详述I2C总线协议、时序,入门不再是难事
2022-12-29 STM32 窗口看门狗中的喂狗操作具体是指什么
2022-12-29 TW8836 lcd
2020-12-29 冲动的离职--具体详谈
2020-12-29 技术在外地