【Linux:epoll】

目录

epoll与select、poll的区别:

epoll操作函数:

int epoll_create(int size);

epoll_ctl: 

epoll_wait: 


epoll与select、poll的区别:

  • select,poll底层是一个线性表的结构,而epoll是一个红黑树结构。
  • epoll、poll不能跨平台
  • select和poll的检测是线性检测,而epoll使用的是回调机制
  • select和poll存在用户/内核之间频繁拷贝数据的问题,但epoll不存在,在epoll中,内核和用户共用一块共享内存
  • 使用epoll没有最大文件描述符的限制,仅受系统中进程能打开的最大文件数目限制
  • 程序员通过epoll能直接拿到已就绪的文件描述符集合,不需要再次检测,而select和poll返回的集合需要判断才能知道哪些文件描述符就绪

epoll操作函数:

int epoll_create(int size);

  • 函数参数:在linux2.6.8以后,该参数是忽略的,只需要指定一个>0的数即可
  • 函数返回值:
    • 失败:-1
    • 成功:返回一个有效的文件描述符,通过这个文件描述符就可以访问创建的epoll实例 

epoll_ctl: 

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

  • 函数的作用是管理红黑树实例上的节点,可以进行添加、删除、修改操作。 
  • 参数:
    • epfd:epoll_create()函数的返回值,通过该参数找到epoll的实例
    • op:一个枚举值。控制通过该函数该执行的操作
      1. EPOLL_CTL_ADD:往epoll模型中添加新节点
      2. EPOLL_CTL_MOD:修改epoll模型中存在的节点
      3. EPOLL_CTL_DEL:删除epoll模型中指定的节点
    • fd:文件描述符,即要添加/修改/删除的文件描述符
    • event:epoll事件,用来修饰第三个参数对应的文件描述符,指定检测该文件描述符的什么事件
  • 返回值:
    • 成功:0
    • 失败:-1

详细解释参数event:

event是一个结构体,有两个成员:events和data。

  • events:是一个委托epoll检测的事件,可以指定的epoll事件(常用)
    • EPOLLIN:读事件, 接收数据, 检测读缓冲区,如果有数据该文件描述符就绪
    • EPOLLOUT:写事件,发送数据,检测写缓冲区,如果可写文件描述符就绪
    • EPOLLERR:异常事件
  • data:传入的指定数据(备注传入事件的一些信息,例如事件存储在哪一个文件描述符),添加文件描述符时,没有指定任何data信息,则传出时,data联合体中没有数据,data中含有四个成员,一般情况下指定fd 。

epoll_wait: 

int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);

  •  epfd:epoll_create()函数的返回值,通过该参数找到epoll的实例
  • events:传出参数,这是一个结构体数组的地址,里面存储了已就绪的文件名描述符信息
  • maxevents:修饰第二个参数,结构体数组的容量
  • tomeout:如果检测的epoll实例中没有就绪的文件描述符,该函数的阻塞时长
    • 0:函数不阻塞
    • >0:如果epoll中没有已就绪的文件描述符,函数阻塞的毫秒数再返回
    • -1:函数一直阻塞
  • 返回值:
    • 成功:=0:函数阻塞被强制解除,没有检测到满足条件的文件描述符。>0:返回检测到已就绪的文件描述符个数
    • 失败:-1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472584.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础——多线程

1. 线程 是一个程序内部的一条执行流程程序中如果只有一条执行流程,那这个程序就是单线程的程序 2. 多线程 指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行) 2.1. 如何创建多条线程 Java通过java.lang.Thread类的对象…

使用Redis的一些经验总结

目录 一、Redis中的key和value的设计 1.key的命名规范 2.避免出现BigKey 3.value中选择恰当的数据类型 例1:比如存储一个User对象,我们有三种存储方式: ①方式一:json字符串 ②方式二:字段打散 ③方式三&#x…

如何在 Ubuntu 上配置 Kotlin 应用环境 ?

Kotlin 是一种运行在 Java 虚拟机 (JVM) 上的现代编程语言,它同时支持函数式和面向对象编程。它可与 Java 互操作,并以其简洁的语法而闻名。在本指南中,我们将介绍在 Ubuntu 系统上准备好 Kotlin 开发环境的要点,包括 Java、Kotli…

2024强化学习的结构化剪枝模型RL-Pruner原理及实践

[2024] RL-Pruner: Structured Pruning Using Reinforcement Learning for CNN Compression and Acceleration 目录 [2024] RL-Pruner: Structured Pruning Using Reinforcement Learning for CNN Compression and Acceleration一、论文说明二、原理三、实验与分析1、环境配置在…

嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)

引言:在我们的日常使用中,MOS就是个纯粹的电子开关,虽然MOS管也有放大作用,但是几乎用不到,只用它的开关作用,一般的电机驱动,开关电源,逆变器等大功率设备,全部使用MOS管…

蓝桥杯每日真题 - 第14天

题目:(2022) 题目描述(13届 C&C B组A题) 解题思路: 定义状态: 使用一个二维数组 dp[j][k] 来表示将数字 k 拆分为 j 个不同正整数的方案数。 初始化: 初始状态设定为 dp[0][0]…

利用云计算实现高效的数据备份与恢复策略

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 利用云计算实现高效的数据备份与恢复策略 利用云计算实现高效的数据备份与恢复策略 利用云计算实现高效的数据备份与恢复策略 引…

thinkphp6配置多应用项目及多域名访问路由app配置

这里写一写TP6下配置多应用。TP6默认是单应用模式(单模块),而我们实际项目中往往是多应用的(多个模块),所以在利用TP6是就需要进行配置,开启多应用模式。 1、安装ThinkPHP6 1.1安装ThinkPHP6.…

JavaScript:浏览器对象模型BOM

BOM介绍 浏览器对象模型(Brower Object Model,BOM)提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window BOM由一系列相关的对象构成,并且每个对象都提供了很多方法和属性。 BOM与DOM区别 DOM是文档对…

SpringBoot 2.2.10 无法执行Test单元测试

很早之前的项目今天clone现在,想执行一个业务订单的检查,该检查的代码放在test单元测试中,启动也是好好的,当点击对应的方法执行Test的时候就报错 tip:已添加spring-boot-test-starter 所以本身就引入了junit5的库 No…

前后端、网关、协议方面补充

这里写目录标题 前后端接口文档简介前后端视角对于前端对于后端代码注册路由路由处理函数 关于httpGET/POST底层网络关于前端的获取 路由器网关路由器的IP简介公网IP(WAN IP)私网IP(LAN IP)无线网络IP(WIFI IP)查询路由器私网IP路由器公网IP LAN口与WIFI简介基本原理 手动配置电…

英伟达基于Mistral 7B开发新一代Embedding模型——NV-Embed-v2

我们介绍的 NV-Embed-v2 是一种通用嵌入模型,它在大规模文本嵌入基准(MTEB 基准)(截至 2024 年 8 月 30 日)的 56 项文本嵌入任务中以 72.31 的高分排名第一。此外,它还在检索子类别中排名第一(…

【计算机网络】TCP网络特点2

断开连接 四次挥手 原因 TCP 四次挥手是为了满足 TCP 连接的全双工特性:两个方向都可以自由传输 保证数据传输的完整性:两方都完成了数据发送和接收并且都同意断开连接 可靠地终止连接以及避免数据混淆和错误等需求:每个方向都需要单独确认导致四次挥手过程 这些…

Opengl光照测试

代码 #include "Model.h" #include "shader_m.h" #include "imgui.h" #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" //以上是放在同目录的头文件#include <glad/glad.h> #include <GLFW/glfw3.…

【MySQL】SQL语言

【MySQL】SQL语言 文章目录 【MySQL】SQL语言前言一、SQL的通用语法二、SQL的分类三、SQLDDLDMLDQLDCL 总结 前言 本篇文章将讲到SQL语言&#xff0c;包括SQL的通用语法,SQL的分类,以及SQL语言的DDL,DML,DQL,DCL。 一、SQL的通用语法 在学习具体的SQL语句之前&#xff0c;先来…

.netcore + postgis 保存地图围栏数据

一、数据库字段 字段类型选择(Type) 设置对象类型为&#xff1a;geometry 二、前端传递的Json格式转换 前端传递围栏的各个坐标点数据如下&#xff1a; {"AreaRange": [{"lat": 30.123456,"lng": 120.123456},{"lat": 30.123456…

T265相机双目鱼眼+imu联合标定(全记录)

最近工作用到t265&#xff0c;记录一遍标定过程 1.安装驱动 首先安装realsense驱动&#xff0c;因为笔者之前使用过d435i&#xff0c;装的librealsense版本为2.55.1&#xff0c;直接使用t265会出现找不到设备的问题&#xff0c;经查阅发现是因为realsense在2.53.1后就不再支持…

【C语言指南】C语言内存管理 深度解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 引言 C语言是一种强大而灵活的编程语言&#xff0c;为程序员提供了对内存的直接控制能力。这种对内存…

Python学习从0到1 day26 第三阶段 Spark ④ 数据输出

半山腰太挤了&#xff0c;你该去山顶看看 —— 24.11.10 一、输出为python对象 1.collect算子 功能: 将RDD各个分区内的数据&#xff0c;统一收集到Driver中&#xff0c;形成一个List对象 语法&#xff1a; rdd.collect() 返回值是一个list列表 示例&#xff1a; from …

【机器学习】机器学习中用到的高等数学知识-1.线性代数 (Linear Algebra)

向量(Vector)和矩阵(Matrix)&#xff1a;用于表示数据集&#xff08;Dataset&#xff09;和特征&#xff08;Feature&#xff09;。矩阵运算&#xff1a;加法、乘法和逆矩阵(Inverse Matrix)等&#xff0c;用于计算模型参数。特征值(Eigenvalues)和特征向量(Eigenvectors)&…