当前位置: 首页 > news >正文

ps做网站图片水印/扬州百度seo

ps做网站图片水印,扬州百度seo,wordpress 信息发布,商务网站开发流程有哪三个阶段IO多路复用是一种高效的I/O处理方式,它允许单个进程能够同时监视多个文件描述符(sockets、文件等),并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作,以提…


        IO多路复用是一种高效的I/O处理方式,它允许单个进程能够同时监视多个文件描述符(sockets、文件等),并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作,以提高系统的性能和响应速度

一、概念


1. IO多路复用的核心

        文件描述符集合:使用一个数据结构(如数组或位图)来管理多个文件描述符,通常使用select、poll或epoll等系统调用来监视这些文件描述符。

        阻塞与非阻塞:IO多路复用可以与阻塞和非阻塞I/O一起使用。非阻塞I/O允许程序立即返回,而不必等待数据准备好。

        事件驱动:当一个或多个文件描述符准备好进行读取或写入操作时,IO多路复用会触发相应的事件,从而通知应用程序执行相应的操作。

        单线程/多线程:IO多路复用可以由单个线程或多个线程来处理,取决于应用程序的需求。通常,单个线程可以管理多个文件描述符。

2. 四种IO模型

阻塞IO模型(Blocking IO)

        ① 阻塞IO模型是最简单的IO模型之一;
        ② 当程序执行IO操作时,它会被阻塞,直到IO操作完成为止;
        ③ 这种模型的效率较低,因为程序在等待IO完成期间无法执行其他任务。


非阻塞IO模型(Non-blocking IO)

        ① 非阻塞IO模型允许程序在等待IO完成时继续执行其他任务;
        ② 当程序请求IO操作时,它会立即返回,不会被阻塞;
        ③ 程序需要不断轮询以检查IO操作是否完成,这可能会导致CPU资源浪费。


多路复用IO模型(IO Multiplexing)

        ① 多路复用IO模型使用了一种机制,允许程序同时等待多个IO操作的完成;
        ② 通常使用select、poll或epoll等系统调用来实现;
        ③ 程序可以同时监视多个文件描述符,只有当其中某个文件描述符有IO事件发生时,程序才会被唤醒处理该事件。


异步IO模型(Asynchronous IO)

        ① 异步IO模型中,程序发起IO操作后立即返回,不会阻塞;
        ② 当IO操作完成时,系统会通知程序,然后程序处理完成的数据;
        ③ 这种模型的效率很高,因为程序不需要轮询,但实现复杂度较高。

        因此IO复用的核心基本思想为:先构造一张有关描述符的表,然后调用一个函数。当这些文件描述符中的一个或多个已准备好进行I/O时函数才返回。函数返回时告诉进程哪些描述符已就绪,可以进行I/O操作。

3. IO复用的优点

  • 高效利用CPU:相较于传统的多线程/多进程模型,IO多路复用可以减少线程/进程的创建和切换开销,提高CPU的利用率。

  • 减少资源占用:减少了每个连接的资源消耗,因为不再需要为每个连接创建一个线程或进程。

  • 简化程序逻辑:IO多路复用可以简化程序的逻辑,使得代码更易于维护和理解。

二、代码实现(TCP服务器端为例)

1. 创建监听套接字socket

	// 创建套接字socketint ser_socket = socket(AF_INET, SOCK_STREAM, 0);if (ser_socket == -1){perror("socket");return -1;}int reuse = 1;//设置套接字属性,  SO_REUSEADDR 允许端口重用 if(setsockopt(ser_socket, SOL_SOCKET, SO_REUSEADDR, (void *)&reuse, sizeof(reuse))<0){perror("setsockopt error");return -1;}


2. 初始化套接字和服务器自己的IP地址结构体(包括端口号)

// 初始化地址结构体 // IP地址+PORT端口号struct sockaddr_in addr;addr.sin_family = AF_INET;   						//地址簇addr.sin_port = atoi(argv[1]);								//端口(一般以传参的传进来)// addr.sin_addr.s_addr = inet_addr("192.168.1.25");	//IP地址addr.sin_addr.s_addr = htonl(INADDR_ANY);			//用特殊的"0.0.0.0"这个IP来绑定本机IP地址


3. 绑定bind

// 绑定地址结构体bindint b = bind(ser_socket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));if(b == -1){perror("bind");return -1;}printf("绑定成功\n");


4. 开启监听listen

int l = listen(ser_socket, 3);if (l == -1){perror("listen");return -1;}printf("监听成功\n");//ser_socket由 待链接套接字 变成 监听套接字


5. 创建文件描述符集合,并初始化

        这里呢设置了套接字超时,就是在规定的时间内如果没有客户端连接,则退出服务器。

//设置套接字接收超时struct timeval tv;tv.tv_sec = 5; //超时秒数tv.tv_usec = 0;setsockopt(ser_socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); // 等待连接acceptstruct sockaddr_in c_addr;		//用来存放客户端链接成功之后的IP加端口int addrlen = sizeof(c_addr);int new_socekt = accept(ser_socket, (struct sockaddr *)&c_addr, &addrlen);if (new_socekt == -1){printf("延时时间到了,服务器退出了\n");perror("accept");return -1;}// new_socekt 链接成功之后,用来通信的套接字printf("客户端【%s】【%u】连接成功\n", inet_ntoa(c_addr.sin_addr), c_addr.sin_port);//客户端的IP跟端口,IP是你客户端本身自带的,但是端口是系统随机分配的啊// 接收消息read/recvchar buf[1024];while(1){bzero(buf, sizeof(buf));read(new_socekt, buf, sizeof(buf));// recv(new_socekt, buf, sizeof(buf), 0);printf(" client %s\n", buf);}


6. 资源释放,关闭套接字

close(new_socekt);// shutdown(new_socekt, SHUT_RDWR);

三、使用场景


       1. 网络服务器: IO复用常用于网络服务器,特别是需要同时处理大量客户端连接的情况,例如Web服务器、聊天服务器和在线游戏服务器。

       2. 网络代理: 代理服务器需要同时监听多个客户端和服务器连接,以便在它们之间传递数据,这是IO复用的典型应用场景。

        3. 聊天应用: 实时聊天应用通常需要处理多个客户端的消息,IO复用可以用于同时监视多个客户端连接,以便实时传递消息。

        4. 文件传输应用: 文件传输服务器需要同时处理多个文件上传或下载请求,使用IO复用可以有效管理这些请求。

        更多C/C++语言、Linux系统、数据结构和ARM板实战相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            系统、网络编程

                                     探索C++

                                             6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉🎉🎉感谢关注🎉🎉🎉

相关文章:

【网络编程】IO多路复用

IO多路复用是一种高效的I/O处理方式&#xff0c;它允许单个进程能够同时监视多个文件描述符&#xff08;sockets、文件等&#xff09;&#xff0c;并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作&#xff0c;以提…...

MySQL与postgreSQL数据库的区别

MySQL 是一个流行的开源关系型数据库管理系统&#xff0c;具有以下优势&#xff1a; 开源和免费&#xff1a;MySQL 是一个开源软件&#xff0c;允许用户免费下载、使用和修改。它的免费版本&#xff08;Community Edition&#xff09;提供了广泛的功能&#xff0c;适用于大多数…...

单片机电子元器件-按键

电子元器件 按键上有 四个引脚 1 2 、 3 4 按下之后 导通 1 3 、 2 4 初始导通 通常按键开关为机械弹性开关&#xff0c;开关在闭合不会马上稳定的接通&#xff0c;会有一连串的抖动 抖动时间的长短有机械特性来决定的&#xff0c;一般为5ms 到10 ms 。 消抖的分类 硬件消…...

Nacos docker实现nacos高可用集群项目

目录 Nacos是什么&#xff1f; Nacos在公司里的运用是什么&#xff1f; 使用docker构建nacos容器高可用集群 实验规划图&#xff1a;​编辑 1、拉取nacos镜像 2、创建docker网桥&#xff08;实现集群内的机器的互联互通&#xff08;所有的nacos和mysql&#xff09;&#x…...

基于Dubbo实现服务的远程调用

目录 前言 RPC思想 为什么使用Dubbo Dubbo技术框架 ​编辑 调用关系流程 基础实现 A.提供统一业务Api B.编辑服务提供者Product B.a 添加依赖 B.b 添加Dubbo 配置(基于yaml配置文件) B.c 编写并暴露服务 C.编辑服务消费者 C.a 添加依赖 C.b 添加Dubbo配置 C.c 引用…...

Redis事务的理解

介绍 Redis通过MULTI、EXEC、WATCH等命令来实现事务功能。 事务提供了一种将多个命令请求打包&#xff0c;然后一次性、按照顺序地执行多个命令的机制&#xff0c;并且在事务执行期间&#xff0c;服务器不会因为其他客户端请求而中断事务的执行功能&#xff0c;他会将事务中的…...

PostgreSQL安装异常,服务无法启动导致创建服务器超时

win上安装pg后无法创建服务器&#xff0c;提示创建超时&#xff0c;发现服务列表里面pg15服务 并没有启动&#xff0c;启动服务器发现服务不了&#xff0c;截图忘记截了&#xff0c;复现不了&#xff0c;解决方法是 换个身份&#xff0c;然后继续启动&#xff0c;然后就可以在…...

汽车电子系统网络安全解决方案

声明 本文是学习GB-T 38628-2020 信息安全技术 汽车电子系统网络安全指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 汽车电子系统网络安全范围 本标准给出了汽车电子系统网络安全活动框架&#xff0c;以及在此框架下的汽车电子系统网络安全活动…...

切片机制和MR工作机制

切片机制 默认的切片大小和块大小一致&#xff0c;切片的个数决定了MapTask的个数。 数据倾斜问题&#xff1a;如果某个切片的大小太小&#xff0c;会浪费了MapTask申请的CPU资源。 如果剩余数据长度大于128*1.1, 就切片成2份&#xff0c;否则就不进行切分了。 InputFormat基…...

【postgresql 基础入门】基础架构和命名空间层次,查看数据库对象再也不迷路

postgresql 基础架构 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&…...

是的,决定放弃算法去机器学习了

可是梦想啊&#xff01;~她永存心间&#xff01;&#xff01;&#xff01; 我啊~本是执着于这些算法的怪咖&#xff0c;梦想是icpc&#xff0c;ccpc~ 可是啊~ 在以后的科研和工作中&#xff0c;这些算法很多都是用不到的&#xff0c;学习算法更重要的目的是锻炼编程能力和分析…...

Python 03(循环语句)

Python03&#xff08;循环语句&#xff09; 文章目录 Python03&#xff08;循环语句&#xff09;一、while语句二、while实现猜数字三、while循环的嵌套while循环嵌套实例需求&#xff1a; 四、for循环1、什么 是for循环2、语法3、执行流程4、for循环的基本使用5、range()函数6…...

安科瑞铁塔基站能耗监控解决方案

安科瑞 华楠 1 背景概述 5G发展&#xff0c;基站先行。5G基站的选址建设&#xff0c;是保证5G信号覆盖的基础&#xff0c;因此5G基站建设是5G产业布局的一部分&#xff0c;也是5G成熟的基础。 2G、3G、4G均是低频段信号传输&#xff0c;宏基站几乎能应付所有的信号覆盖。但由…...

操作系统-线程复用

操作系统执行线程复用的过程涉及到线程调度和管理。线程复用是指操作系统能够有效地重用现有的线程来执行新的任务&#xff0c;而不必每次都创建新线程。这有助于减少线程创建和销毁的开销&#xff0c;提高系统性能。下面是操作系统如何执行线程复用的关键步骤&#xff1a; 线程…...

通达信自定义副图行业指标K线指标 HYZS_QD

行业指数:HY_INDEXC,NODRAW; DRAWKLINE(HY_INDEXH,HY_INDEXO,HY_INDEXL,HY_INDEXC); MA5:MA(HY_INDEXC,5),COLORWHITE; {MA10:MA(HY_INDEXC,10),COLORYELLOW,LINETHICK2}; DRAWTEXT_FIX(1,1,1,1,STRCAT(STRCAT(CON2STR(HY_INDEXADV,0),/),STRCAT(CON2STR(HY_INDEXDEC,0), ))),…...

MDK-Keil AC6 Compiler屏蔽特定警告

最近在使用STM32CubeMX生成MDK工程是&#xff0c;使用了 AC6 版本的编译器进行编译代码&#xff0c;然后发现了一些警告&#xff0c;但是在 AC5 版本下编译又正常。于是研究了下怎么屏蔽特定的警告&#xff0c;这里记录一下。 1. Keil AC6屏蔽特定警告 遇到的警告如下&#x…...

计算机网络的故事——了解Web及网络基础

了解Web及网络基础 文章目录 了解Web及网络基础一、使用 HTTP 协议访问 Web二、HTTP 的诞生三、网络基础 TCP/IP四、与 HTTP 关系密切的协议 : IP、TCP 和 DNS 一、使用 HTTP 协议访问 Web 根据Web浏览器指定的URL&#xff0c;从对应的服务器中获取文件资源&#xff0c;从而显…...

[系统安全] 五十三.DataCon竞赛 (2)2022年DataCon涉网分析之恶意样本IOC自动化提取详解

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…...

自动驾驶——估计预瞄轨迹YawRate

1.Introduction 在ADAS控制系统中&#xff0c;通常根据预瞄距离x去估计横向距离y&#xff0c;有如下关系&#xff1a; y a0 a1 x a2 * x^2 a3 * x^3 &#xff0c;那么现在有个需求&#xff0c;希望根据上述x和y的关系&#xff0c;去估计规划预瞄轨迹yawRate 2.How to es…...

PMP证书考下来要多少费用?

PMP考试共有三项费用&#xff1a;分为考前费用、考后费用和续证费用。 第一项是考前费用&#xff1a; 1、培训费用&#xff0c;在英文报名时需要填写培训公司名称和35学时的培训证明。一般的培训公司收费不一&#xff0c;有些公司大概是三千元左右&#xff0c;而有些公司可能…...

C动态分配

动态分布与静态发布&#xff1a; 静态分配 1、 在程序编译或运行过程中&#xff0c;按事先规定大小分配内存空间的分配方式。int a [10] 2、 必须事先知道所需空间的大小。 3、 分配在栈区或全局变量区&#xff0c;一般以数组的形式。 4、 按计划分配。 动态分配 1、在程序运…...

C语言——程序环境和预处理(再也不用担心会忘记预处理的知识)

了解程序环境和预处理 前言&#xff1a;一、程序环境二、编译链接2.1 翻译环境2.2 编译的几个阶段2.3 运行环境 三、预处理3.1 预定义符号3.2. #define的使用3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##的用途3.2.5 带副作用的宏参数3.2.6…...

Docker部署EMQX

1、简介 EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。 Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台。 MQTT 是轻量的 (Lightweight)、发布订阅模式 (Pu…...

Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon

Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon 目前主流的负载均衡方案有两种,一种是集中式均衡负载,在消费者与服务提供者之间使用独立的代理方式进行负载,比如F5、Nginx等。另一种则是客户端自己做负载均衡,根据自己的请求做负载,Ribbon就属于客户端自…...

好玩的js特效

记录一些好玩的js特效 1、鱼跳跃特效 引入jquery:https://code.jquery.com/jquery-3.7.1.min.js 源码如下&#xff1a; <!--引入jquery--> <script src"https://code.jquery.com/jquery-3.7.1.min.js"></script> <!--引入跳跃源码--> <s…...

java实现带有html格式和附件的符合RFC822规范的eml格式的信件原文组装

1. 传递html格式的eml信件正文 html传递就是解析成带有< html>标签的字符串在正文中传递即可 From:综合运行平台 to:111qq.com // 重点是格式设置成text/html 编码的话需要设置成UTF-8&#xff0c;不然可能直接在正文中展示html标签&#xff0c;为不是解析成具体的样式…...

如何使用PyTorch训练LLM

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 像LangChain这样的库促进了上述端到端AI应用程序的实现。我们的教程介绍 LangChain for Data Engineering & Data Applications 概述了您可以使用 Langchain 做什么&#xff0c;包括 LangChain 解决的问题&#xf…...

uniapp 手机 真机测试 ​ 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可​

uniapp 手机 真机测试 打开手机 找到手机的 版本号 点击 知道提示 &#xff08;启动开发者模式&#xff09; 然后 在进行usb的连接打开 运行uniapp 到手机基台 手机确认 即可 四&#xff0c; 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可...

RTSP流媒体服务器EasyNVR视频平台以服务方式启动异常却无报错,该如何解决?

EasyNVR是基于RTSP/Onvif协议的安防视频云服务平台&#xff0c;可实现设备接入、实时直播、录像、检索与回放、云存储、视频分发、级联等视频能力服务&#xff0c;可覆盖全终端平台&#xff08;电脑、手机、平板等终端&#xff09;&#xff0c;在智慧工厂、智慧工地、智慧社区、…...

【List篇】使用Arrays.asList生成的List集合,操作add方法报错

早上到公司&#xff0c;刚到工位&#xff0c;测试同事就跑来说"功能不行了&#xff0c;报服务器异常了&#xff0c;咋回事";我一脸蒙&#xff0c;早饭都顾不上吃&#xff0c;要来了测试账号复现了一下&#xff0c;然后仔细观察测试服务器日志&#xff0c;发现报了一个…...