【多路IO复用】select
select:
1.select:当被监听的 fd(文件描述符)就绪后会返回,但是我们无法知道具体是哪些 fd 就绪了,只能遍历所有的 fd。通常来说某一时刻,就绪的 fd 并不会很多,但是使用 select 必须要遍历所有的 fd,这就造成了一定程度上的性能损失。select 最多可监听的 fd 是有限制的,32位操作系统默认1024个,64位默认2048
select函数的API:
select函数的API
#include <sys/select.h>
/* According to earlier standards */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
功能: 监听多个文件描述符的属性变化(读,写,异常)
void FD_CLR(int fd, fd_set *set);
int FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);参数:
nfds : 最大文件描述符+1
readfds : 需要监听的读的文件描述符存放集合
writefds :需要监听的写的文件描述符存放集合 NULL
exceptfds : 需要监听的异常的文件描述符存放集合 NULL
timeout: 多长时间监听一次 固定的时间,限时等待 NULL 永久监听
struct timeval {
long tv_sec; /* seconds */ 秒
long tv_usec; /* microseconds */微妙
};返回值: 返回的是变化的文件描述符的个数
注意: 变化的文件描述符会存在监听的集合中,未变化的文件描述符会从集合中删除
select实现原理:
应用层中父进程通过内核的selsect监听文件描述符缓冲区的变化,内核就会返回给父进程
以fd_set为例,每次都要从用户态拷贝至内核态,同时还要在内核态进行循环遍历,然后把有事件的响应的文件描述符fd_set返回,又要从内核态拷贝至用户态。用户态拿到这个有事件的文件描述符返回,还要针对返回的描述符进行遍历,才能知道哪个文件描述符对应的Socket可写可读,总共经历了两次遍历,两次拷贝,所以说为什么Select在文件描述符比较多的情况,效率为什么是低下的原因。
select 的优缺点:
优点: 跨平台
缺点:
文件描述符1024的限制 由于 FD_SETSIZE的限制
只是返回变化的文件描述符的个数,具体哪个那个变化需要遍历
每次都需要将需要监听的文件描述集合由应用层符拷贝到内核
大量并发,少了活跃,select效率低
相关文章:

【多路IO复用】select
select: 1.select:当被监听的 fd(文件描述符)就绪后会返回,但是我们无法知道具体是哪些 fd 就绪了,只能遍历所有的 fd。通常来说某一时刻,就绪的 fd 并不会很多,但是使用 select 必须要遍历所有…...

cuda编程学习——基础知识介绍!干货向(三)
本文主要内容为介绍CUDA编程前的一些基础知识 参考资料: 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 文章、讲解视频同步更新公众《AI知识物语》,B站:出门吃三碗饭 1:并行计算 并行程序可以分为 指令并行࿱…...

30 VueComponent 事件的绑定
前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 用例如下, 我们这里核心关注 事件的处理流程 问题的调试 整个…...

作用域及作用域链
作用域 隔离变量的集合 作用域最大的用处就是隔离变量,不同作用域内的同名变量不会有命名冲突。 作用域类型 全局作用域,函数作用域和块级作用域。 1)全局作用域,在整个代码文件中都可以访问的作用域。 2)函数作用域…...

深入解析Linux C/C++ 编程中的内存泄漏问题
深入解析Linux C/C 编程中的内存泄漏问题 I. 前言 (Introduction)1.1 文章目的与内容概述 (Purpose and Overview of the Content)1.2 重要性和实用性的说明 (Significance and Practicality Explanation)1.3 数据结构与内存泄漏的基本概念 (Basic Concepts of Data Structure …...

【爬虫第三章】 Python基础
预计更新一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 3…...

电力系统的虚假数据注入攻击和MTD系统研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【阿里云】阿里云OSS对象存储— 开通OSS服务、搭建OSS环境、快速入门
目录 一、开通OSS服务 二、搭建OSS环境 1、创建Bucket存储空间 2. 创建文件夹上传图片 3. RAM 访问控制 三、快速入门 1.下载SDK 2.创建存储空间[可选] 3.上传图片 一、开通OSS服务 二、搭建OSS环境 1、创建Bucket存储空间 选择 Bucket列表,进行Bucket创建…...

代理对象Proxy是什么
Proxy是ES6(ECMAScript 2015)引入的一个特性,它是一种用于创建代理对象的构造函数。代理对象可以用来拦截并自定义对目标对象的操作。 通过使用Proxy,您可以在目标对象上设置各种拦截器(称为"陷阱"…...

会话跟踪cookie和session
什么是会话跟踪技术 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可能包含多次请求和响应。 会话跟踪:一种维护浏览器状态的方法,服务器需…...

ACS Cent. Sci 2018 | 数据驱动的分子连续表征的自动化学设计
原文标题:Automatic Chemical Design Using a Data-Driven Continuous Representation of Molecules 代码:https://github.com/aspuru-guzik-group/chemical_vae 原文链接:https://pubs.acs.org/doi/10.1021/acscentsci.7b00572 Automatic…...

安卓Termux搭建web服务器【公网远程手机Android服务器】
文章目录 概述1.搭建apache2.安装cpolar内网穿透3.公网访问配置4.固定公网地址5.添加站点 概述 Termux是一个Android终端仿真应用程序,用于在 Android 手机上搭建一个完整的Linux 环境,能够实现Linux下的许多基本操作,不需要root权限Termux就…...

【大数据之Hive】二、Hive安装
Hive安装部署(最小化部署) 安装部署Hive(最小化只用于本机测试环境中,不可用于生产环境),并运行。 步骤: (1)把apache-hive-3.1.3-bin.tar.gz解压到/opt/module/目录下&…...

三大特性之多态
文章目录 静态的多态动态的多态虚函数虚函数的重写(覆盖)利用虚函数重写实现多态重写的两个例外1.协变2.析构函数的函数名不同 C11的override和final 重载,重写(覆盖),重定义(隐藏)抽…...

单调队列优化dp
文章目录 单调队列优化dp烽火传递修剪草坪绿色通道琪露诺旅行问题Watching Fireworks is Fun瑰丽华尔兹股票交易 单调队列优化dp 文章首发于我的个人博客:欢迎大佬们来逛逛 单调队列优化dp的建模形式:这是窗口右滑动的情况 对于窗口左滑动的也是同理。…...

【低压配电漏电继电器660V/LLJ-100H/AC220V 中性点漏电保护 JOSEF】
LLJ-F(S)系列漏电继电器 系列型号: LLJ-10F(S)漏电继电器LLJ-15F(S)漏电继电器LLJ-16F(S)漏电继电器 LLJ-25F(S)漏电继电器LLJ-30F(S)漏电继电器LLJ-32F(S)漏电继电器 LLJ-60F(S)漏电继电器LLJ-63F(S)漏电继电器LLJ-80F(S)漏电继电器 LLJ-100F(S)漏电继电器LLJ-120…...

[数据结构习题]栈——中心对称链
[数据结构习题]栈——中心对称链 👉知识点导航💎:【数据结构】栈和队列 👉[王道数据结构]习题导航💎: p a g e 70.4 page70.4 page70.4 本节为栈和链表综合练习题 题目描述: 🎇思路…...

AMD Software Adrenalin Edition 23.5.1驱动发布,快速获取驱动
AMD新驱动赶在五月天发布!AMD Software Adrenalin Edition 23.5.1驱动 ,为部分游戏带来支持,以及为重要的软件带来修复。驱动人生带大家一览AMD WHQL 23.5.1驱动的优化内容。 游戏方面,AMD WHQL 23.5.1主要为游戏《指环王&#x…...

Visual Studio内引用Lua解释器,编译Lua源码,执行Lua脚本
前言 本篇在讲什么 在Visual Studio中引入lua的解释器 使用C调用Lua文件 本篇适合什么 适合初学Lua的小白 适合需要C/C和lua结合开发的人 本篇需要什么 对Lua语法有简单认知 对C/C语法有简单认知 依赖Lua5.1的环境 依赖VS 2017编辑器 本篇的特色 具有全流程的图文…...

【赏】C语言迷宫游戏设计如何解决屏幕严重刷屏问题同时实现运行时间的显示
要解决屏幕严重刷屏问题,可以参考以下方法: 在每次刷新前清空屏幕,使用system("cls")命令来实现清屏。 只在需要更新的地方进行刷新,而不是整个屏幕都重新绘制。在此代码中,只需要在用户输入移动指令后更新电子鼠的位置即可,不用每次循环都重新画整个迷宫。同时…...

Spring Boot如何实现接口文档自动生成
Spring Boot如何实现接口文档自动生成 在开发Web应用程序时,接口文档是非常重要的一环,它可以帮助我们快速了解API的功能和使用方法,同时也是与其他开发人员和团队协作的重要工具。然而,手动编写和维护接口文档是一项繁琐的工作&…...

二进制概述-0day漏洞利用原理(1)
二进制利用基本原理,Lord PE的使用,凡是资源性的物质且可表达的皆可利用。 往期文章: 漏洞概述-0day漏洞利用原理(0)_luozhonghua2000的博客-CSDN博客 PE 文件格式 PE (Portable Exec utable) 是 Win32 平台下可执行文件遵守的数据格式。常见的可执行文件(如“*.exe”文件…...

加密与解密 调试篇 动态调试技术 (二)-常见断点
目录 常见的断点 1.INT 3 断点 检测 绕过 2.硬件断点 原理 我们给出硬件中断的例子 删除硬件断点 3.内存断点 原理 例子 删除 区别 总结 4.内存访问一次性断点 5.消息断点 例子 删除 6.条件断点 (1)按寄存器条件中断 (2&…...

【JavaScript】拾遗(5.25)
文章目录 1. JavaScript2.HTML嵌入JS的第一种方式:行间事件3.HTML嵌入JS的第二种方式:脚本块的方式4. HTML嵌入JS的第三种方式:外部式(外链式)5. 局部变量和全局变量6. 函数7.事件8.回调函数8.1 注册事件8.2 代码的执行顺序 1. JavaScript JavaScript是一门脚本语言。…...

QMI8658 - 姿态传感器学习笔记 - Ⅲ
文章目录 1.复位1.1 上电复位:1.2 推荐工作条件 2. 校准(COD)2.1 校准步骤2.2 校准注意事项:2.3 校准状态指示2.4 校准参数更新 3. 自检3.1 加速度计自检3.2 陀螺仪自检 4. Ctrl94.1 写Ctrl94.2 读Ctrl94.3 Ctrl9详细命令说明 5. 中断5.1 同步采样模式5.…...

PHP+vue二手车交易信息网站系统
原来二手车网站由于二手车网站制度的不完善,许多城市的二手车网站市场都很少,而且欺诈行文较严重,肆意提高价格,隐瞒汽车所存在的故障问题,人们买卖二手车还是经过朋友帮忙介绍的途径来实现。这就导致了很多人的想卖车…...

NTM中attr的用法
代码1 attrs class CopyTaskParams(object):name attrib(default"copy-task")controller_size attrib(default100, convertint)controller_layers attrib(default1,convertint)num_heads attrib(default1, convertint)sequence_width attrib(default8, convert…...

【python资料】pandas的条件查询
一、说明 在使用Pandas的DataFrame进行数据挖掘的时候,需要形形色色的条件查询,但是这些查询的基本语法是啥,查询的灵活性如何,本文将对他们进行详细列出,便于以后查阅。 二、Pandas条件查询方法 2.1 简单条件查询 1、…...

中间件(三)- Kafka(二)
Kafka 6. 高效读写&Zookeeper作用6.1 Kafka的高效读写6.2 Kafka中zookeeper的作用 7. 事务7.1 Producer事务7.2 Consumer事务 8. API生产者流程9. 通过python调用kafka9.1 安装插件9.2 生产者(Producer)与消费者(Consumer)9.3…...

DAY01_MySQL基础数据类型navicat使用DDL\DML\DQL语句练习
目录 1 数据库相关概念1.1 数据库1.2 数据库管理系统1.3 常见的数据库管理系统1.4 SQL 2 MySQL2.1 MySQL安装2.1.1 安装步骤 2.2 MySQL配置2.2.1 添加环境变量2.2.2 MySQL登录2.2.3 退出MySQL 2.3 MySQL数据模型2.4 MySQL目录结构2.5 MySQL一些命令2.5.1 修改默认账户密码2.5.2…...