首页 > 其他分享 >epoll_wait函数

epoll_wait函数

时间:2024-01-30 18:23:49浏览次数:23  
标签:__ 函数 epoll 描述符 事件 events wait

目录


函数实现

/* Wait for events on an epoll instance "epfd". Returns the number of
   triggered events returned in "events" buffer. Or -1 in case of
   error with the "errno" variable set to the specific error code. The
   "events" parameter is a buffer that will contain triggered
   events. The "maxevents" is the maximum number of events to be
   returned ( usually size of "events" ). The "timeout" parameter
   specifies the maximum wait time in milliseconds (-1 == infinite).

   This function is a cancellation point and therefore not marked with
   __THROW.  */
extern int epoll_wait (int __epfd, struct epoll_event *__events,
		       int __maxevents, int __timeout)
	__attr_access ((__write_only__, 2, 3)) __nonnull ((2));

低层实现逻辑

epoll_wait 是 Linux 下的一个函数,用于等待事件的发生。它是 epoll 接口的一部分,用于高效地处理大量文件描述符的 I/O 事件。

epoll_wait 的底层实现逻辑主要涉及以下几个方面:

  1. 注册文件描述符:使用 epoll_ctl 函数将需要监听的文件描述符注册到 epoll 实例中,并指定感兴趣的事件。

  2. 等待事件:调用 epoll_wait 函数会阻塞当前线程,直到有事件发生。

  3. 事件处理:当有事件发生时,epoll_wait 函数会返回发生事件的文件描述符数量,并将对应的事件存储在用户提供的数组中。通过遍历这个数组,可以获取发生事件的文件描述符和对应的事件类型。

  4. 高效的实现:epoll 采用了一种基于回调的机制,不需要轮询所有的文件描述符来检测事件。它维护了一个红黑树来存储注册的文件描述符,并利用 mmap 来加速事件的通知和处理。

  5. 支持水平触发和边缘触发:epoll 可以配置为水平触发或边缘触发模式。水平触发模式下,只要文件描述符上有事件未处理,就会一直触发通知;而边缘触发模式下,只有在事件发生的边缘才会触发通知。

  6. 线程安全性:epoll 在多线程环境下是安全的,可以在多个线程中同时使用。

epoll_wait 的底层实现利用了 Linux 内核的 epoll 机制,提供了高效的 I/O 事件通知和处理能力。它是在 Linux 上进行高性能网络编程和并发编程的重要工具。

标签:__,函数,epoll,描述符,事件,events,wait
From: https://www.cnblogs.com/yubo-guan/p/17997710

相关文章

  • 达梦---自定义函数 find_in_set()
    createorreplaceFUNCTIONFIND_IN_SET(piv_str1varchar2,piv_str2varchar2,p_sepvarchar2:=',')RETURNNUMBERISl_idxnumber:=0;--用于计算piv_str2中分隔符的位置strvarchar2(500);--根据分隔符截取的子字符串piv_......
  • go启动流程(一) main函数的执行
    go版本:go1.19操作系统:linux系统架构:amd64go version go1.19 linux/amd64本文主要分析在go程序中,编写的main函数是如何被执行的。流程总览图启动流程从程序执行入口开始利用gdb确定程序执行入口编写一个简单的go程序//main.gopackage mainimport "fmt"func main......
  • Qt 线程同步 QMutex、QReadWriteLock、QWaitCondition
    在Qt中,线程同步可以使用以下几种方式来实现:一、互斥锁(QMutex)互斥锁用于保护共享资源,确保在同一时间只有一个线程能够访问该资源。线程在访问共享资源之前需要获取互斥锁,使用完后再释放互斥锁,以确保同一时间只有一个线程在执行关键代码段。1.创建QMutex对象:在需要进行线程同步的......
  • 索引和函数视图及存储过程
    索引和函数视图及存储过程1.索引在数据库中索引最核心的作用是:加速查找1.1索引原理为什么加上索引之后速度能有这么大的提升呢?因为索引的底层是基于B+Tree的数据结构存储的很明显,如果有了索引结构的查询效率比表中逐行查询的速度要快很多且数据量越大越明显数据库的索......
  • node后端中sql使用的表达式和函数
    参考:https://xiaoman.blog.csdn.net/article/details/135903790一.表达式MySQL表达式是一种在MySQL数据库中使用的计算式或逻辑式。它们可用于查询、更新和过滤数据,以及进行条件判断和计算。算术表达式:可以执行基本的数学运算,例如加法、减法、乘法和除法。例如:SELECTcol1+co......
  • Python中的函数用法
    ​ Python中,函数是组织好的、可重用的、用来执行一个特定任务的代码块。函数提高了代码的模块化和代码重用率。函数是一种将代码块组织在一起以便重复使用的工具。函数可以接受输入数据,并返回输出数据。参考文档:Python中的函数用法-CJavaPy1、定义函数使用关键字def来定义......
  • 【18.0】MySQL进阶知识之函数
    【一】什么是函数跟存储过程是有区别的,存储过程是自定义函数,函数就类似于内置函数注意与存储过程的区别,mysql内置的函数只能在sql语句中使用!【二】字符串函数【0】介绍CONCAT(str1,str2,...):将多个字符串连接成一个字符串。SUBSTRING(str,start,length):返回字符......
  • R语言非线性方程数值分析生物降解、植物生长数据:多项式、渐近回归、负指数方程、幂函
    全文链接:https://tecdat.cn/?p=33742原文出处:拓端数据部落公众号简介在选择最佳拟合实验数据的方程时,可能需要一些经验。当我们没有文献信息时该怎么办?我们建立模型的方法通常是经验主义的。也就是说,我们观察过程,绘制数据并注意到它们遵循一定的模式。例如,我们的客户可能观察......
  • OpenHarmony—ArkTS不支持生成器函数
    规则:arkts-no-generators级别:错误目前ArkTS不支持生成器函数,使用async或await机制进行并行任务处理。TypeScriptfunction*counter(start:number,end:number){for(leti=start;i<=end;i++){yieldi;}}for(letnumofcounter(1,5)){console.l......
  • epoll_event结构体
    epoll_event结构体一般用在epoll机制中,其定义如下:structepoll_event{uint32_tevents;/*Epollevents*/epoll_data_tdata;/*Userdatavariable*/}__attribute.squareup(__packed__);typedefunionepoll_data{void*ptr;intfd;uint32_t......