半关闭、端口复用与IO多路复用

文章目录

    • 半关闭
    • 端口复用
    • IO多路复用(IO多路转接)
      • 模型
      • 解决措施
    • sellect
      • 缺点
    • poll
      • 应用
      • 缺点
    • epoll
      • 应用
      • 工作模式

半关闭

使用close(fd);所对应的文件描述符写和读都关闭了。
在这里插入图片描述
在这里插入图片描述

端口复用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以解决绑定失败的问题。

IO多路复用(IO多路转接)

在这里插入图片描述
socket通信
io多路复用就是操作缓冲区
IO多路复用 是的程序能够同时监听多个文件描述符,能够提高程序的性能。
Linux下实现IO多路复用的系统调用主要有select、poll和epoll。

在这里插入图片描述

模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
每次循环遍历一遍,浪费资源。

解决措施

在这里插入图片描述
遍历标志位,检查
在这里插入图片描述

sellect

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

fd_set:为1024bit的标志位寄存器,是一个传入传出参数,将需要检测的文件描述符位置1传入,内核负责判断需要检测的文件描述符是否有IO操作,若有标志位依然为1,若没有则标志位置0,检测完成传出。
readfds:检测读缓冲区有数据了,可以读了,置1
writefds:检测写缓冲区还有空余空间可以写,置1
timeout:如果为NULL,表示永久阻塞,直到检测到了文件描述符变化;如果都=0, 不阻塞;如果时间>0,阻塞对应的时间。
返回值:
-1表示调用失败
>0:表示有几个文件描述符发生了变化

在这里插入图片描述

在这里插入图片描述

socket监听之后,进行文件描述符集合设置;
设置完成进行select,有文件描述符发生变化会有返回值,否则阻塞
判断哪个文件描述符发生了变换,进行相应的处理;
socket文件描述符发生变化,获取客户端连接文件描述符,并添加到集合
客户端连接文件描述符发生变化,对数据进行处理。

在这里插入图片描述
在这里插入图片描述
判断socket文件描述符,是否有新连接:
在这里插入图片描述
判断其他描述符,是否有数据来:
在这里插入图片描述
注意 : 上面的代码的问题是,设置rdset后传入传出后被修改了,下次传入不是想要的了,可以定义一个传入传出的集合tmp,一个设置的集合rdset,每次需要select时将设置集合赋值给tmp,进行操作。

缺点

在这里插入图片描述

poll

在这里插入图片描述
在这里插入图片描述
timeout:阻塞时间,单位为ms。
返回值:
-1:失败
>0(n):n个检测到集合中有n个文件描述符发生变化。
事件设置举例(通过|实现多个事件值):
在这里插入图片描述

应用

在这里插入图片描述
在这里插入图片描述

判断返回值,判断事件:
在这里插入图片描述
增加文件描述符:
从最开始向后遍历,找到最前面没有使用的文件描述符。
在这里插入图片描述
遍历搜索是哪个文件描述符发生事件,要从lfd开始,到最大文件描述符,索引下标则从0开始,到最大有文件描述符的下标。

缺点

在这里插入图片描述
改善了3.4条缺点,但其他依然存在。

epoll

创建,在内核就存在一个eventpoll实例,并返回内核缓冲区中的文件描述符
操作
检测
在这里插入图片描述
在这里插入图片描述
返回值:
-1:调用失败
>0:文件描述符,操作epoll的实例
在这里插入图片描述
三个事件分别是读、写、错误。
在这里插入图片描述
在这里插入图片描述

应用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意 :这个地方对epoll监听的事件如果有多种,就要对事件进行判断,防止出现错误判断应用;对其判断就是通过epevs[i].enents & EPOLL…进行判断(返回值与事件与)。

工作模式

LT模式和ET模式
在这里插入图片描述
上边缺省的工作方式就是默认工作方式。
读一次也算操作了,即使缓冲区里有数据也不重复通知,直到有新数据进来才会再进行新的通知。

两者区别:LT模式:
在这里插入图片描述
ET模式:
在这里插入图片描述
设置ET模式(在设置事件时或上EPOLLET):

在这里插入图片描述
在这里插入图片描述
再ET模式下数据读取可采用循环读取方式:
可以通过循环读取数据,直到读取结束,
read阻塞控制是由于文件描述符属性控制,所以可以通过设置文件描述符属性,改变为非阻塞:
需要头文件:
#include <fcntl.h>
#include <errno.h>

//设置cfd属性非阻塞
int flag = fcntl(cfd, F_GETFL);
flag |= O_NONBLOCK;
fcntl(cfd, F_SETFL, flag);

在这里插入图片描述
非阻塞情况,没有数据read会返回-1,错误号为EAGAIN,可通过判断处理
在这里插入图片描述

打印到终端的方式
write(STDOUT_FILENO, buf, len);
printf(“%s\n”, buf);

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

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

相关文章

【二分+贪心】CF1665 C

Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a; 一开始想太简单wa6了 只想到先感染大的分量&#xff0c;然后最后把最大的分量剩下的染色 但是可能会有别的分量更大&#xff08;因为最后给最大的染色之后可能不再是最大的&#xff09; 可以用堆维护&#xf…

加载并绘制时间域内的心电图信号,并实施Q因子为1的陷波滤波器以去除50 Hz频率研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Cadvisor+InfluxDB+Grafan+Prometheus(详解)

目录 一、CadvisorInfluxDBGrafan案例概述 &#xff08;一&#xff09;Cadvisor Cadvisor 产品特点&#xff1a; &#xff08;二&#xff09;InfluxDB InfluxDB应用场景&#xff1a; InfluxDB主要功能&#xff1a; InfluxDB主要特点&#xff1a; &#xff08;三&#…

SpringBoot案例-部门管理-删除

目录 查看页面原型&#xff0c;明确需求 页面原型 需求 阅读接口文档 思路分析 功能接口开发 控制层&#xff08;Controllre类&#xff09; 业务层&#xff08;Service类&#xff09; 持久层&#xff08;Mapper类&#xff09; 接口测试 前后端联调 查看页面原型&a…

AWS-自定义ami的S3存取使用

需要提前配置好aws-cli哈 对应的区域 要统一 示例&#xff1a;即AWS-CLI 和 EC2、AMI、S3以上资源均要使用同已区域&#xff0c;以下拿新加坡举例 1.新建自定义AMI 2.查看ami状态 确认是可用状态&#xff0c;才能开始操作 3.aws-cli 开始存入s3 只能使用桶的根目录 开始上…

Python-OpenCV中的图像处理-直方图

Python-OpenCV中的图像处理-直方图 直方图统计直方图绘制直方图Matplotlib绘制灰度直方图Matplotlib绘制RGB直方图 使用掩膜统计直方图直方图均衡化Numpy图像直方图均衡化OpenCV中的直方图均衡化CLAHE 有限对比适应性直方图均衡化 2D直方图OpenCV中的2D直方图Numpy中2D直方图 直…

Glide 的超时控制相关处理

作者&#xff1a;newki 前言 Glide 相信大家都不陌生&#xff0c;各种源码分析&#xff0c;使用介绍大家应该都是烂熟于心。但是设置 Glide 的超时问题大家遇到过没有。 我遇到了&#xff0c;并且掉坑里了&#xff0c;情况是这样的。 调用接口从网络拉取用户头像&#xff0c…

在外SSH远程连接Ubuntu系统

在外SSH远程连接Ubuntu系统【无公网IP】 文章目录 在外SSH远程连接Ubuntu系统【无公网IP】前言1. 在Ubuntu系统下安装cpolar软件2. 完成安装后打开cpolar客户端web—UI界面3. 创建隧道取得连接Ubuntu系统公网地址4. 打开Windows的命令界面并输入命令 前言 随着科技和经济的发展…

解锁Python集合的妙用:常用函数与实例深度解析

Python的集合&#xff08;Set&#xff09;是一种无序且不重复的数据结构&#xff0c;拥有强大的去重和集合运算功能。在这篇博客中&#xff0c;我们将深入探讨集合的常用函数&#xff0c;并通过实际案例为你展示其灵活应用。 创建集合​ 集合可以通过花括号来创建&#xff0c…

golang拥有wireshark数据包解析能力

golang拥有wireshark数据包解析能力 1. 功能和实现 wireshark拥有世界上最全面的协议解析能力并且还在不断更新中&#xff0c;通过调研&#xff0c;没有办法找到与wireshark同水平的解析工具。 为了使得golang语言可以拥有wireshark一样强大的协议解析能力&#xff0c;库 gowir…

生态系统服务(InVEST模型)

第一天&#xff1a; 1. 生态系统服务理论联系实践案例讲解 2. InVEST模型的开发历程、不同版本的差异及对数据需求的讲解 3. InVEST所需数据的要求&#xff08;分辨率、格式、投影系统等&#xff09;、获取及标准化预处理讲解 4. InVEST运行常见问题及处理解决方法讲解 5.…

微信小程序实现当前页面更新上一个页面

日常项目中需要实现的一个价格脱敏功能&#xff1a;通过点击页面二中的查看完整信息 点击回退按钮实现页面一中的价格显露出来 通过查询了大量资料发现 大多数都是通过调用上一个接口的onload 或者onshow 实现视图更新 经测试后 发现 无法实现 只能更改数据 无法更新视图 实现…

解决:django设置DEBUG=false时出现的问题

首先&#xff0c;我用的是django4.2&#xff0c;python3.10版本 本来&#xff0c;如果在settings.py中使用 DEBUG True&#xff0c;那么什么问题也没有&#xff0c;当然&#xff0c;这属于调试模式。 DEBUG True TEMPLATE_DEBUG DEBUGSTATIC_URL /static/ STATICFILES_DI…

【C++】开源:ceres和g2o非线性优化库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ceres和g2o非线性优化库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

大模型落地金融业,想象力在哪?

金融大模型的难点在于&#xff0c;能否在产业中扎得更深&#xff1b;其颠覆性也更建立在&#xff0c;纵深到产业中去&#xff0c;赋能金融行业的长尾场景发展&#xff0c;以及重拾“金融信任”。 作者|思杭 编辑|皮爷 出品|产业家 “从经济角度讲&#xff0c;整个金融业…

eNSP 实现 CLI 窗口叠放

文章目录 1 问题截图2 问题解决3 扩展3.1 打开所有 CLI3.2 CLI&#xff1a;Command line interface 1 问题截图 问题描述&#xff1a;命令行窗口是分开的&#xff0c;找对应的窗口太麻烦了 2 问题解决 解决办法&#xff1a;点下图控件即可。 效果展示&#xff1a; 3 扩展 …

16-3_Qt 5.9 C++开发指南_使用QStyle 设置界面外观_实现不同系统下的界面效果的匹配

文章目录 1. QStyle的作用&#xff08;实现不同系统下的界面效果的匹配&#xff09;2. Qt内置样式的使用3. 源码3.1 可视化UI设计3.2 mainwindow.cpp 1. QStyle的作用&#xff08;实现不同系统下的界面效果的匹配&#xff09; Qt 是一个跨平台的类库&#xff0c;相同的界面组件…

STM32 4G学习

硬件连接 ATK-IDM750C模块可直接与正点原子 MiniSTM32F103开发板板载的ATK模块接口&#xff08;ATK-MODULE&#xff09;进行连接。 功能说明 ATK-IDM750C是正点原子&#xff08;ALIENTEK&#xff09;团队开发的一款高性能4G Cat1 DTU产品&#xff0c;支持移动4G、联通4G和…

MySQL_事务学习笔记

事务 注意&#xff1a;一定要使用 Innodb 存储引擎 概述&#xff1a;一组操作的集合&#xff0c;是不可分割的工作单元&#xff0c;会把一个部分当成一个整体来处理&#xff0c;事务会把操作同时提交或者是撤销。要么同时成功&#xff0c;要么同时失败。 比如&#xff1a;上云…

LVS集群

目录 1、lvs简介&#xff1a; 2、lvs架构图&#xff1a; 3、 lvs的工作模式&#xff1a; 1&#xff09; VS/NAT&#xff1a; 即&#xff08;Virtual Server via Network Address Translation&#xff09; 2&#xff09;VS/TUN &#xff1a;即&#xff08;Virtual Server v…