Web Server项目实战2-Linux上的五种IO模型

上一节内容的补充:I/O多路复用是同步的,只有调用某些API才是异步的

Unix/Linux上的五种IO模型

a.阻塞 blocking

调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停地去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。

b.非阻塞 non-blocking

非阻塞等待,每隔一段时间就去检测IO事件是否就绪,没有就绪时可以去做其他事。非阻塞IO执行系统调用时总是立即返回,不管事件是否已经发生,若事件没有发生,则返回-1,此时可以根据errno区分这两种情况,对于 accept, recv, send 这些事件未发生时,errno 通常被设置为 EAGAIN

c. IO复用 IO multiplexing

Linux用 select/poll/epoll 函数实现 IO 复用模型,这些函数也回使进程阻塞,但是和阻塞 IO 所不同的是这些函数可以同时阻塞多个 IO 操作。而且可以同时对多个读操作、写操作的 IO 函数进行检测,直到有数据可读或可写时,才真正调用 IO 操作函数。

*注意:IO 复用的目的并不是提高程序处理多个客户端的能力,单线程、单进程同时检测多个文件描述符是否可以执行 IO 操作的能力

d.信号驱动 signal-driven

Linux用套接口进行信号驱动 IO ,安装一个信号处理函数,进程继续运行并不阻塞,当 IO 事件就绪,进程收到 SIGIO 信号,然后处理 IO 事件。

在上图中,“等待数据”为阶段一,“数据从内核空间拷贝到用户空间”为阶段二。内核在阶段一是异步的,在阶段二是同步的;与非阻塞 IO 的区别在于它提供了消息通过机制,不需要用户进程不断地轮询检查,减少了系统 API  的调用次数,提高了效率。

e.异步 asynchronous

Linux中,可以调用 aio_read 函数告诉内核文件描述符缓冲区指针和大小、文件偏移量及通知的方式,然后立即返回,此时用户进程可以去做自己的事情。当内核将数据拷贝到缓冲区后,再通知应用程序。

以上五种 IO 模型,在实际应用中,最常用的是非阻塞模型 IO 复用模型。

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

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

相关文章

Offline RL : Beyond Reward: Offline Preference-guided Policy Optimization

ICML 2023 paper code preference based offline RL,基于HIM,不依靠额外学习奖励函数 Intro 本研究聚焦于离线偏好引导的强化学习(Offline Preference-based Reinforcement Learning, PbRL),这是传统强化学习&#x…

轻量音乐网站程序源码,在线音乐免费听歌

这是一个高品质的音乐共享和流媒体平台,用户可以在这个网站上免费在线听歌。这个轻量级的音乐网站程序源码,是您创建自己的音乐流媒体网站的最佳选择!它还支持制作插件,并且在更新后,您可以保留您的自定义设置。 下 载…

操作系统408考研-经典例题

什么是操作系统?答:操作系统,是计算机系统中最基本、最重要的系统软件,是其它软件 的***支撑***。控制和管理计算机系统的硬件和软件资源,合理的组织计算机工 作流程,并为用户使用计算机提供公共和基本的服务 2.多道程序 (multiprogrammming) 和多重处理 (multiprocessi…

Python基于PyQt6制作GUI界面——多选框

QCheckBox 是 PyQt6 中的一个复选框控件&#xff0c;它允许用户通过单击来选择或取消选择某个选项。与 QRadioButton 不同&#xff0c;QCheckBox 控件并不互斥&#xff0c;这意味着用户可以同时选择多个 QCheckBox。示例对应的制作的 ui文件 界面如下所示。 <?xml version…

【MATLAB源码-第215期】基于matlab的8PSK调制CMA均衡和RLS-CMA均衡对比仿真,对比星座图和ISI。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 CMA算法&#xff08;恒模算法&#xff09; CMA&#xff08;Constant Modulus Algorithm&#xff0c;恒模算法&#xff09;是一种自适应盲均衡算法&#xff0c;主要用于消除信道对信号的码间干扰&#xff08;ISI&#xff09;…

Python使用thread模块实现多线程

介绍&#xff1a; 线程&#xff08;Threads&#xff09;是操作系统提供的一种轻量级的执行单元&#xff0c;可以在一个进程内并发执行多个任务。每个线程都有自己的执行上下文&#xff0c;包括栈、寄存器和程序计数器。 在Python中&#xff0c;可以使用threading模块创建和管理…

SQL练习2.3

建表 # 学生表 create table t_student (stu_id varchar(10),stu_name varchar(10),stu_age datetime,stu_sex varchar(10) );# 课程表 create table t_t_course (c_id varchar(10),c_name varchar(10),c_teaid varchar(10) );# 教师表 create table t_t_teacher (tea…

nginx 动静分离、gzip压缩、负载均衡、root/alias

在Nginx中&#xff0c;动静分离、gzip压缩、负载均衡以及root和alias指令是常见的配置和优化点。下面我将分别解释这些概念和如何配置它们。 动静分离 动静分离是指将动态请求和静态请求分开处理&#xff0c;由不同的服务器或Nginx的不同位置来处理。这样可以提高网站的性能和…

SpringBoot 启动报错,EnableConfigurationProperties 注解跳坑记

使用SpringBoot 脚手架搭建的一个简单的 web demo &#xff0c;开启了属性自动注入&#xff0c;配置文件如下&#xff1a; Setter Getter Configuration ConfigurationProperties(prefix "com.ff") EnableConfigurationProperties(FFProperties.class) public clas…

今日刷三题(day14):ISBN号码+kotori和迷宫+矩阵最长递增路径

题目一&#xff1a;ISBN号码 题目描述&#xff1a; 每一本正式出版的图书都有一个ISBN号码与之对应&#xff0c;ISBN码包括9位数字、1位识别码和3位分隔符&#xff0c;其规定格式如“x-xxx-xxxxx-x”&#xff0c;其中符号“-”是分隔符&#xff08;键盘上的减号&#xff09;&…

STM32使用旋转编码开关

一、旋转编码开关如何工作 编码器内部有一个开槽圆盘&#xff0c;连接到公共接地引脚 C。它还具有两个接触针 A 和 B&#xff0c;如下所示。 当您转动旋钮时&#xff0c;A 和 B 按照特定顺序与公共接地引脚 C 接触&#xff0c;具体顺序取决于转动旋钮的方向。 当它们与公共地接…

在 package.json 文件中,版本号前的 ^ 符号含义

在 package.json 文件中&#xff0c;版本号前的 ^ 符号有特定的含义&#xff0c;它控制了包依赖的版本范围。 具体来说&#xff0c;^ 符号表示兼容性范围符号&#xff0c;允许安装与指定版本兼容的更新版本。 例如&#xff0c;“vue”: “^3.0.0” 意味着&#xff1a; 可以安…

Web3 游戏平台 Creo Engine 销毁代币总量的20%,以促进长远发展

Creo Engine 5月16日进行了第三次代币销毁&#xff0c;这次的销毁占代币总量的 20%。一共销毁了2亿 $CERO 代币&#xff0c;市场价值接近 2000 万美元。 Creo Engine 致力于连接世界、为玩家提供一站式游戏中心&#xff0c;并提升 Web3 游戏体验。 Creo Engine 发布于2022年&am…

USB抓包工具:bushound安装及使用

一、环境搭建 下载busbound6.01安装包&#xff0c;安装完成&#xff0c;重启电脑。 二、工具配置 按照下图配置工具&#xff1a; 使能自动识别新设备 2. 设置抓取数据的容量 三、抓包 回到capture选项卡&#xff0c;在页面的右下角有个run的按钮&#xff0c;点击使能&…

RedHat9 | 磁盘管理

硬盘分区类型 MBR分区方案 MBR也被称为主引导记录&#xff0c;它存在0柱面0磁道0扇区内&#xff0c;在磁盘的第一个扇区内&#xff0c;大小为512字节 512字节包含&#xff1a;446字节初始化程序加载器、64字节分区表、2字节校验码由于每个分区为16字节&#xff0c;所以MBR只…

Git配置详解

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

js实现元素根据鼠标滚轮滚动向左右上下滑动着从模糊到清楚显示出来

html代码 <div ref{test} id"animatedElement" className"not-animated"> <div style{{width:"100px",height:"50px",backgroundColor:"red"}}> </div> </div> JS代码 const te…

用智能插件(Fitten Code: Faster and Better AI Assistant)修改好了可以持久保存的vue3留言板

天际 第一修改是选项式&#xff1a; <!-- 模板结构 --> <template><div><textarea placeholder"请输入备注内容" v-model"newItem"></textarea><button click"addItem">添加</button><hr><…

Vue2+Element 封装评论+表情功能

有需要的小伙伴直接拿代码即可&#xff0c;不需要下载依赖&#xff0c;目前是初始版本&#xff0c;后期会进行代码的优化。 评论组件如下&#xff1a; 创建 comment.vue 文件。 表情组件 VueEmoji.vue 在评论组件中使用。 <template><div class"comment"…

《主对角线求和》

描述 有一个n行n列的二维数组&#xff0c;请你求出二维数组的主对角线上的所有数字的和是多少。 输入描述 第一行一个整数n&#xff0c;代表下面输入的是n行n列(2≤n≤10)的二维数组&#xff1b; 接下来n行&#xff0c;每行n列&#xff0c;表示二维数组的每个元素各是多少。 …