IO多路复用实现并发

embedded/2024/9/25 8:34:32/

实现过程:

1.创建文件描述符集合

2.添加文件描述符到集合中

3.通过内核进行检测

4.根据返回的结果做对应的操作(对io进行读或者写操作)

函数接口select进行并发

功能:检测多路io

参数1:int nfds :fds最大值 + 1

参数2:readfds 读事件

参数3:writefds 写事件

参数4:exceptfds 其他 : 一般null

参数5:timeout 一般null

返回值:成功返回内核通知给我们到达fd的个数

失败返-1

不足:

select 只能检测1024个fd(有限制)

select 监听的文件描述符在用户层,需要在应用层和内核层互相传递数据

select 需要循环遍历才能找到产生的事件

select 只能工作在水平触发模式(低速模式),无法工作在边缘触发模式(高速模式)

函数poll

不足:

将将测fd上限优化为无限制

其他与select相同

函数epoll实现并发

1.创建文件描述符集合:epoll_create(int size)成功返回句柄,失败返回-1

2.添加fd到对应集合:int epoll_ctl();

3.通知内核进行检测:int epoll_wait();

4.根据返回的结果对io进行读写操作

epoll优点:

配置网络

网络重启命令:


http://www.ppmy.cn/embedded/102541.html

相关文章

SpringBoot多环境日志配置

SpringBoot 默认使用 LogBack 日志系统 默认情况下,SpringBoot项目的日志只会在控制台输入。 如果想查询历史日志则无法找到,我们需要一个日志系统来统一管理日志。 一般正式项目会有单独日志系统,将日志操作存入数据库。 第一种方式是 在 ap…

如何对利用GWAS关联到的SNP位点进行注释

GWAS(全基因组关联研究)关联到的SNP(单核苷酸多态性)位点注释是一个复杂的过程,涉及多个步骤,旨在理解这些位点在基因组中的生物学意义。 1.对SNP位点进行注释 涉及的一般步骤: 确定SNP位点&a…

AI学习指南深度学习篇-循环神经网络的调参和优化

AI学习指南深度学习篇-循环神经网络的调参和优化 简介 在深度学习领域,循环神经网络(Recurrent Neural Networks, RNN)是一种常用的模型,用于处理序列数据,如自然语言、时间序列等。然而,RNN模型容易出现…

Excel十进制度转为度分秒格式

最近写报告经常需要整理坐标表。 不同的情况往往需要不同的手段来实现。 其中一种情况是,ArcMap以单位度计算坐标字段,然后利用‘表转Excel’工具导出为xls表格。 通过这种方式导出的经纬度坐标是十进制度,比如37.702398675533。 而我需要…

使用 UniApp 实现摄像头视频流的接入并在页面上显示视频流

UniApp 是一个使用 Vue.js 开发所有前端应用的框架,它支持一次开发,多端部署(包括H5、小程序和APP)。下面我将展示如何使用 UniApp 实现摄像头视频流的接入,并在页面上显示视频流。我还会提供一些使用场景以及代码优化…

Django 框架中F和Q的作用

在Django框架中,F() 和 Q() 是两个非常有用的表达式对象,它们分别用于数据库查询中的字段操作和复杂查询条件的构建。 F() F() 表达式被用于对数据库中的字段值进行直接操作,而不需要先将它们加载到Python内存中。这在执行数据库级别的更新…

网络缓存:加速网络应用的隐形引擎

标题:网络缓存:加速网络应用的隐形引擎 在数字化时代,网络应用的性能对用户体验至关重要。网络缓存作为一种提高网络应用性能的技术,它通过减少数据传输和重复获取相同信息的需求,显著提升了应用的响应速度和效率。本…

深入解析JavaScript模块化开发:ES6模块与CommonJS的对比与应用

一、ES6模块(ES Modules) ES6模块是ECMAScript 2015(也称为ES6)引入的标准化模块系统。它在语法上原生支持,并且广泛应用于现代JavaScript开发中。ES6模块通过import和export关键字来导入和导出模块,具有静…