【面试题】网络 IO多路复用模型 select

目录

1.概念

使用select模型的步骤

select模型特点:

Windows 和Linux 有什么区别?


为什么要引入select模型呢 同步阻塞问题我们可以利用多线程 或者把socket改成非阻塞 当我们要接受数据的时候我们要来回查看接受缓冲区有没有数据这样我们就要来回切换用户和内核浪费时间降低效率 所以我们让一个把所有的socket的有无数据都看了呢

1.概念

select 模型是Winsock中最常见的I/0模型,核心是利用select函数,实现对I/O的管理。利用select函数来判断某socket上是否有数据可读,或者能否向一个套接字写入数据,防止程序在socket处于阻塞模式中,在一次I/0调用过程中(send,recv,accept),被迫进入锁定状态:可以同时等待多个套接字,当某个或者多个套接字满足可读写条件时通知应用程序调用输入或者输出函数进行读写。

使用select模型的步骤

1) 使用FDZERO宏,初始化一个fdset对象;

2) 使用FDSET宏,将套接字句柄加入到fdset集合中;

3) 调用 select 函数,等待其返回……select 完成后,会返回在所有 fdset 集 合中设置的套接字句柄总数,并对每个集合进行相应的更新。

4) 根据 select的返回值和 FDISSET宏,对 fdset 集合进行检查。

5) 知道了每个集合中“待决”的 I/O操作之后,对 I/O进行处理,然后返回步骤 1 ),继续进行 select 处理。

select模型特点:

select :单线程处理多个客户端

1.跨平台windows linux

2.简单 方便

3.个数限制 windows 默认64 最大1024

4.阻塞(查看)没有解决将数据从内核拷贝到用户区的阻塞问题

Windows 和Linux 有什么区别?

select模型在Windows和Linux系统中都有应用,但两者在实现细节、行为表现以及性能方面存在一些差异

1)在windows上,对select函数的第一个参数传入任意值都可以,Windows本身不使用这个值,只是为了兼容才保留这个参数,但实际开发中为了兼容跨平台代码,也会按照惯例将这个值设置为需要检测事件所有fd中的最大值+1

typedef struct {long int _fds_bits[16] }fd_set;

2)  在Linux上,向fd_set集合中添加新的fd时,决定这个fd在_fds_bits 数组的位置的实现使用的是位图法(bitmap);

       在windows上添加fd至fd_set的实现则是依次从数组的第0个位置开始向后递增。

3)select模型在Windows平台下,默认限制是64个socket,最大限制是1024

                          Linux平台下,默认限制是1024个文件描述符

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

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

相关文章

英伟达被“压制”的25年

十九世纪中叶的美国西部,掀起了一场轰轰烈烈的淘金热,但最终赚到钱的,并不是拿命去赌的淘金者。一个名叫萨姆布瑞南的商人,通过向淘金者出售铲子,成了加州历史上第一位百万富翁。 每一次风口出现时,总有企…

使用Qt Installer Framework在centos7中打包

文章目录 步骤 1: 安装Qt和Qt Installer Framework安装Qt安装Qt Installer Framework步骤 2: 创建项目目录结构步骤 3: 编写安装脚本配置文件(config/config.xml)Package 信息meta/package.xmldata 目录步骤 4: 编写安装脚本步骤 5: 生成安装程序总结在CentOS 7中使用Qt Inst…

k8s自动清理节点服务

要在 Kubernetes 中实现当某个节点的 CPU 或内存使用超过 90% 时清理该节点上的服务,你可以使用以下几种方法: 自定义脚本和 cron job:编写一个脚本监控节点的资源使用情况,并在超过阈值时触发清理操作。使用 DaemonSet 运行监控…

互联网下的扭蛋机小程序开发:探索其独特优势

随着互联网技术的飞速发展,小程序作为一种新兴的轻量级应用形式,已经在各个领域展现出强大的生命力和广泛的应用前景。在娱乐和零售行业,扭蛋机作为一种经典的随机性消费体验方式,结合小程序进行开发,带来了诸多独特优…

每日一更 EFK日志分析系统

需要docker和docker-compose环境 下面时docker-compose.yaml文件 [rootnode1 docker-EFK]# cat docker-compose.yaml version: 3.3services:elasticsearch:image: "docker.elastic.co/elasticsearch/elasticsearch:7.17.5"container_name: elasticsearchrestart: …

鲲鹏arm服务器部署paddleOCR

1. 部署环境信息查看 1.1 操作系统 $ cat /etc/os-release PRETTY_NAME"UnionTech OS Server 20" NAME"UnionTech OS Server 20" VERSION_ID"20" VERSION"20" ID"uos" PLATFORM_ID"platform:uel20" HOME_URL&q…

「AIGC」大数据开发语言Scala入门

Scala 是一种多范式编程语言,设计初衷是集成面向对象编程和函数式编程的特点。它运行在 Java 虚拟机(JVM)上,因此可以与 Java 库无缝集成。Scala 也因其在大数据处理领域的应用而受到欢迎,特别是与 Apache Spark 这类框架结合使用。 1. 环境搭建 安装 Scala:可以从 Scala…

使用 Python 五年后,我发现学 python 必看这三本书!少走一半弯路

第一本 《Python编程-从入门到实践》 适合零基础的读者 豆瓣评分:9.1 推荐指数:5颗星 推荐理由: 本书是针对所有层次的 Python 读者而作的 Python 入门书。全书分为两部分: 第一部分介绍使用Python 编程所必须了解的…

CV每日论文--2024.6.28

1、On Scaling Up 3D Gaussian Splatting Training 中文标题:扩展 3D 高斯泼溅训练 简介:3D高斯点描(3DGS)由于其卓越的视觉质量和渲染速度,越来越受欢迎用于3D重建。然而,3DGS的训练目前仅在单个GPU上进行,由于内存限制,它的处理高分辨率和大规模3D重建…

SPU和sku的区别

SPU(Standard Product Unit)和SKU(Stock Keeping Unit)是两种常见的商品管理概念,它们在商品分类和管理中扮演着不同的角色。 SPU(标准产品单元): 定义:SPU代表了一种标…

java中的抽象类abstract

抽象类 ① 格式:abstract class A {} ② 抽象类不能实例化对象 ③ 抽象类可以没有抽象方法,但是抽象方法所在的类,一定是抽象类 ④ 抽象类中包含构造器,因为在子类实例化对象时,会直接或间接调用父类构造器 抽象方法…

2024 年江西省研究生数学建模竞赛题目 B题投标中的竞争策略问题---完整文章分享(仅供学习)

问题: 招投标问题是企业运营过程中必须面对的基本问题之一。现有的招投标平台有国家级的,也有地方性的。在招投标过程中,企业需要全面了解招标公告中的相关信息,在遵守招投标各种规范和制度的基础上,选择有效的竞争策…

新手教学系列——【Python开发】不同系统更换pip源的方法

在使用Python进行开发时,你可能会发现使用pip安装包的速度较慢,尤其是在国内进行操作时。为了提高安装速度,我们可以将pip的默认源更换为国内的一些镜像源。本文将详细介绍如何在不同操作系统上进行这一操作,并给出常用的国内镜像源。 为什么要换源 pip默认使用的是官方的…

vector::C++

在 C 标准库中,std::vector 是一个动态数组容器,提供了类似于数组的功能,但具有自动调整大小的能力。它是 C 标准模板库(STL)的一部分,广泛用于存储和管理一组动态大小的元素。 std::vector 的特点 动态大…

axios源码打包关于rollup.config.js文件分析

axios 项目下的rollup.config.js文件 const lib require("./package.json"); const outputFileName "axios"; const name "axios"; const namedInput "./index.js"; const defaultInput "./lib/axios.js";export defa…

怎么彻底关闭Nacos?解决启动时Spring连接Nacos报错

Nacos Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是阿里巴巴开源的一个项目,旨在帮助您发现、配置和管理微服务。Nacos提供了一系列丰富的特性集合,支持服务发现和服务健康监测、动态配置服务、服务元数据和流量管理等功能。 主要功能 服务…

Steam社区101错误代码/steam社区报错、打不开怎么办

Steam社区是很多游戏玩家经常逛的一个互动空间,玩家可以在Steam社区了解游戏的相关评价,也可以在Steam社区和五湖四海的游戏玩家一起讨论最近游戏的心得,分享游玩技巧,探讨游戏战术等等,结识不同地区的玩家。不过很多玩…

【数据库原理】总结(期末版)

题型关系范式题[数据库原理]关系范式总结(自用)-CSDN博客事务分析题[数据库原理]事务-CSDN博客Sql题 MySQL:MySQL基本语法 Oracle:Oracle基本语法 ​​​​​​ 关系代数[数据库原理]关系代数-CSDN博客 sql里面主要是考增删改查授权撤销权限等内容&#…

Java案例实现双色球

一问题&#xff1a; 二具体代码&#xff1a; package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {int []usersnumbersusernumslect();System.out.println("用户");for (int i 0; i <…

Kafka如何防止消息重复发送

Kafka 提供了几种方式来防止消息重复发送和处理。这些方式通常取决于生产者和消费者的设置和实现方式&#xff1a; 生产者端幂等性&#xff08;什么是幂等性&#xff09;&#xff1a; 幂等性生产者&#xff1a;从 Kafka 0.11 版本开始引入了生产者端的幂等性支持。生产者可以通…