libevent
文章平均质量分 94
本专栏主要介绍libevent库使用及原理。
老中医的博客
专注于C/C++音视频开发。
展开
-
libevent源码剖析-小根堆
小根堆(Min-Heap)是一种完全二叉树结构。原创 2024-10-29 22:36:35 · 554 阅读 · 0 评论 -
libevent源码剖析-基本数据结构
前面系列文章对libevent源码的主体结构,从reactor框架实现,到evbuffer和bufferevent实现原理,及libevent的例子进行了剖析,自此,我们便可基于libevent开发app了。 从本文开始,主要来介绍下libevent源码的枝叶部分,包括数据结构、C开发技巧、工具函数等。本文从数据结构开始介绍。 单链表相关操作都在libevent源码根目录compat/sys/queue.h文件下。这里简要介绍下单链表原理及其操作。2.1.2 访问方法2.1.3原创 2024-10-29 16:42:46 · 1034 阅读 · 0 评论 -
libevent源码剖析-evconnlistener
evconnlistener 是 libevent 提供的一个用于处理传入连接的接口。它可以简化监听套接字的处理,使用户能够方便地在事件循环中接收客户端连接,并为每个新连接创建事件。 其主要功能如下: 定义:1.1.2 evconnlistener_free 定义:1.1.3 evconnlistener_set_error_cb 定义: 功能: 设置错误回调函数,当发生错误时调用该回调。 以下是一个使用 evconnlistener 的简单 TCP 服务端原创 2024-10-25 11:38:08 · 901 阅读 · 0 评论 -
libevent源码剖析-event
在类unix系统中编写网络程序时,我们经常需要处理3类事件-IO事件&signal事件&timer事件,libevent通过reactor来注册&调度&处理IO事件,并且也将signal和timer事件借助socket() / accept()/ socketpair()/ eventfd() / pipe() / pipe2() / timer_createfd()等系统调用,巧妙的将各平台的signal事件和timer事件,融入到了libevent的reactor框架中。程序员只需要利用几个简易的a原创 2024-10-21 16:08:07 · 803 阅读 · 0 评论 -
libevent源码剖析-开篇
关于,曾在项目中直接或间接使用过,开源的便是对的c++封装,窃以为简单好用,但裸用的话本人在最近开源的缓存库里使用过,感受是比较累。累的原因,一则是C语言所写,一则是对源码还不够熟,踩坑较多。因此,从本文开始,拟对写系列文章,目的是通过对的源码分析,来加深理解。后文均基于版本来剖析。原创 2024-10-14 15:24:20 · 1044 阅读 · 0 评论 -
libevent源码剖析之http
libevent 的 HTTP 框架提供了一种轻量级、异步的方式来处理 HTTP 请求和响应,广泛用于编写简单的或其他与 HTTP 协议相关的程序。它构建在 libevent 的事件机制之上,并充分利用了事件驱动和异步 I/O 的优势,能够高效地处理高并发的 HTTP 请求。原创 2024-10-14 11:58:21 · 1058 阅读 · 0 评论 -
libevent源码剖析之bufferevent
是 libevent 中提供的一种,建立在之上,用于管理带缓冲。它简化了异步 I/O 的管理,使得开发者在处理网络数据时可以更加方便地进行读取、写入和处理错误。bufferevent 背后通过结合以及,形成一个结构化的 I/O 流管理方式。原创 2024-10-14 11:57:40 · 1018 阅读 · 0 评论 -
libevent源码剖析之evbuffer
是 libevent 提供的一个动态缓冲区,用于高效地管理和处理 I/O 数据流。在网络编程中非常有用,特别是在处理异步 I/O 和流式数据时。它抽象出了数据的读写缓冲区,实现了灵活的数据存储与管理机制,同时避免了频繁的内存拷贝操作。不连续():创建一个新的 evbuffer 缓冲区。():释放缓冲区。():向缓冲区追加数据。():从缓冲区中移除数据。():将一个的内容追加到中。():从文件描述符或读取数据到缓冲区。():将缓冲区中的数据写到文件描述符或。原创 2024-10-14 11:57:08 · 708 阅读 · 0 评论 -
libevent源码剖析之reactor
是一种事件驱动的并发处理模式,常用于网络服务器和事件循环系统中。它主要的功能是通过或者处理I/O操作,避免阻塞,并且能够高效处理的事件。,以下摘自原文:Theis ansingleor, whichforand:系统中会有多个事件源,例如网络套接字、文件描述符、定时器等,触发各种事件,如读、写、超时等。:事件分离器(通常是系统调用,如select(), poll(), 或epoll())负责监控这些事件源,并将发生事件的事件源标记出来。原创 2024-10-14 11:56:37 · 1045 阅读 · 0 评论 -
libevent源码剖析之iocp
I/O Completion Ports (IOCP) 是 Windows 上的一种高效 I/O 多路复用机制,用于处理大量并发连接和 I/O 操作。与 select、poll 等机制不同,IOCP 采用了和来高效地处理异步 I/O 操作。:IOCP 允许程序在执行 I/O 操作时不阻塞主线程,I/O 操作会在后台进行,完成后通过完成端口通知主线程。:IOCP 使用线程池来处理并发 I/O 事件,根据负载动态分配工作线程,从而最大化 CPU 和 I/O 资源的利用。原创 2024-10-14 11:56:03 · 894 阅读 · 0 评论 -
libevent源码剖析之epoll
epoll 是 Linux 提供的一种高效的多路复用机制,用于处理大量并发连接时的 I/O 事件。与传统的 select 和 poll 相比,epoll 的性能大幅提高,尤其在监控时具有显著优势。:epoll 采用事件驱动模式(edge-triggered 和 level-triggered),只在文件描述符的状态发生变化时才通知应用程序,而不像 select 和 poll 需要每次调用时轮询所有文件描述符。原创 2024-10-14 11:55:31 · 878 阅读 · 0 评论 -
libevent源码剖析之poll
poll 多路复用是与 select 类似的系统调用,用于监控多个文件描述符上的 I/O 操作,允许程序同时等待多个事件(如可读、可写、或异常)。与 select 相比,,并提供了更灵活的接口。,适用于高并发场景。:poll 可以监控任意数量的文件描述符(不限于 select 的 1024 个限制)。:程序调用 poll,阻塞等待指定的文件描述符变为就绪状态(如可读、可写或出现异常)。:一旦文件描述符有事件发生,poll 返回,程序可以处理这些事件。原创 2024-10-14 11:54:57 · 861 阅读 · 0 评论 -
libevent源码剖析之select
select 多路复用是一种用于监视多个文件描述符(如网络套接字、文件等)的 I/O 操作状态的系统调用。通过 select,程序可以同时等待多个 I/O 操作的就绪(如读、写或异常事件),从而避免为每个 I/O 操作创建独立的线程或进程。 select 最常用于高并发场景下的事件驱动编程,例如网络服务器或实时通信系统。通过 select,应用可以一次性监视大量连接,处理 I/O 操作时不会阻塞。 select 多路复用的原理,是通过轮询所关注的fd的IO事件是否就绪的,而且所支持的最大fd有上原创 2024-10-14 11:54:28 · 729 阅读 · 0 评论 -
开源一个C缓存库
在当下的视频点播应用场景下,端侧对视频缓存的需求可谓刚需,一方面可以为公司节省流量成本,一方面也可以提升用户的播放体验,有一石二鸟之效。近期,本人用C写了一个缓存库,支持系统平台,并在以上3个平台充分自测过,,开箱即用。原创 2024-10-09 10:41:43 · 699 阅读 · 0 评论 -
libevent之android与鸿蒙编译过程
最近基于libevent开发了一个端侧的缓存代理库,先是基于macOS编译开发的,基本0问题,后来移植到鸿蒙与android时遇到一些编译链接问题。原创 2024-08-17 09:51:24 · 1187 阅读 · 0 评论