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 复用模型。
相关文章:
Web Server项目实战2-Linux上的五种IO模型
上一节内容的补充:I/O多路复用是同步的,只有调用某些API才是异步的 Unix/Linux上的五种IO模型 a.阻塞 blocking 调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停地去检查这个函数有没有返回,…...
Docker | 基础指令
环境:centos8 参考: 安装 Docker | Docker 从入门到实践https://vuepress.mirror.docker-practice.com/install/ 安装Docker 卸载旧版本,安装依赖包,添加yum软件源,更新 yum 软件源缓存,安装 docker-ce…...
10款手机黑科技app,每款都好用到爆!
AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1. 计划程序应用 —— Android Auto Text Android Auto Text(前身为 Do It Later)是一款简单易用的日程安排应用程序&am…...
tomcat请求数据解析过程
前面提到tomcat请求处理的io交互过程,现在开始看下经过io交互后tomcat是怎么处理请求数据的。首先到AbstractProtocol.java中的process方法,注意这个方法是在tomcat线程池分配的线程调用的。生成用来对请求字节流数据进行解析的Http11Processor。 public…...
《扑克牌游戏》
描述 有一个扑克牌游戏,游戏规则是不断地摸牌,尽可能地使手上的牌的点数接近于10,最完美的情况是总点数为10,不可以超过10,否则就爆了。输入10张牌的点数,(每张点数不超过10),请你输出用户应该抓…...
kali模块及字典介绍
1. 基本模块介绍 模块 类型 使用模式 功能 dmitry 信息收集 命令行 whois查询/子域名收集/端口扫描 dnmap 信息收集 命令行 用于组建分布式nmap,dnmap_server为服务端;dnmap_client为客户端 i…...
交换排序、归并排序、计数排序
冒泡排序: void BubbleSort(int* a, int n) {//第一层循环是趟数,第二层是交换for (int i 0; i < n-2; i){int flag 0;for (int j 0; j < n - 2 - i; j){if (a[j] > a[j 1]){swap(&a[j], &a[j 1]);flag 1;}}if (flag 0){break;…...
怎么查看 iOS ipa包 mobileprovision 改动
查看 iOS .ipa 包中的 .mobileprovision 文件(即配置文件或描述文件)的改动,可以通过以下步骤进行: 重命名 .ipa 文件:将 .ipa 文件扩展名改为 .zip。例如,如果文件名为 MyApp.ipa,则重命名为 M…...
【Unitydemo制作】音游制作—控制器与特效
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:就业…...
[程序员] 最近的感悟,错误处理占大头?
根据昨天分享的一个问题,想到的。 在代码里,异常处理的代码也算是占大头,扑面而来的就是发生错误时怎么处理的大片代码;而且出现问题的概率是绝对的占大头。所以,异常代码出现bug的概率也在不知不觉中增加!…...
vue3(一) - 结构认识
通过之前博客应该已经完成了vue脚手架的认识和创建(地址),这节我们简单介绍一下需要使用的一些关键技术,后续在详细介绍 结构目录 创建脚手架时,我选择了TypeScript,store,route这三个选项 index.html入口 node_mo…...
数据库迁移——kettle开发01
背景:数据库的多种多样,在搭建项目之初,并没有详细考虑到数据库的建设,当增加配置不能满足业务场景需要时,这时候考虑到使用更高性能的数据库,如将MySQL更换为oracle数据库。或者在搭建新项目时,…...
Netty: Netty中的组件
文章目录 一、EventLoop1、EventLoop2、EventLoopGroup(1)处理普通时间和定时任务(2)处理IO任务 二、Channel三、Future&Promise四、Handler&Pipeline五、ByteBuf 一、EventLoop 1、EventLoop EventLoop本质是一个单线程…...
Julia编程01:Julia语言介绍
在2020上半年,因为疫情无法返校,所以在家待了半年,期间学习一点了R语言、Python、Julia、linux和C语言,只是学习基础语法并没有项目练习,因此返校半年后差不多都不记得了,现在重新捡起Julia丰富下当时写的笔…...
二叉树顺序结构及链式结构
一.二叉树的顺序结构 1.定义:使用数组存储数据,一般使用数组只适合表示完全二叉树,此时不会有空间的浪费 注:二叉树的顺序存储在逻辑上是一颗二叉树,但是在物理上是一个数组,此时需要程序员自己想清楚调整…...
【Python】pandas连续变量分箱
路过了学校花店 荒野到海边 有一种浪漫的爱 是浪费时间 徘徊到繁华世界 才发现你背影 平凡得特别 绕过了城外边界 还是没告别 爱错过了太久 反而错得完美无缺 幸福兜了一个圈 🎵 林宥嘉《兜圈》 import pandas as pd import numpy as np from sklearn.model_selecti…...
Qt 打卡小程序总结
1.Qt::Alignment(枚举类型)用于指定控件或文本的对齐方式 Qt::AlignLeft:左对齐。Qt::AlignRight:右对齐。Qt::AlignHCenter:水平居中对齐。Qt::AlignTop:顶部对齐。Qt::AlignBottom:底部对齐。…...
【qt】标准项模型
标准项模型 一.使用标准型项模型1.应用场景2.界面拖放3.创建模型4.配套模型5.视图设置模型6.视图属性的设置 二.从文件中拿到数据1.文件对话框获取文件名2.创建文件对象并初始化3.打开文件对象4.创建文本流并初始化5.读取文本流6.关闭文件7.完整代码 三.为模型添加数据1.自定义…...
一文深度剖析 ColBERT
近年来,向量搜索领域经历了爆炸性增长,尤其是在大型语言模型(LLMs)问世后。学术界开始重点关注如何通过扩展训练数据、采用先进的训练方法和新的架构等方法来增强 embedding 向量模型。 在之前的文章中,我们已经深入探…...
css左右滚动互不影响
想实现左右都可以滚动,且互不影响。 只需要再左边的css里面 .threedlist {cursor: pointer;width: 280px;position: fixed;height: 100vh; /* 定义父容器高度 */overflow-y: auto; /* 只有在内容超过父容器高度时才出现滚动条 */} 如果想取消滚动条样式 .threedli…...
Taotoken用量看板如何帮助团队清晰掌控AI支出
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken用量看板如何帮助团队清晰掌控AI支出 1. 从模糊到清晰:AI成本管理的挑战 在团队项目中集成大模型能力&#x…...
C语言学习笔记20260522—交换两个整数的值(地址传递)/打印1-100直接3倍数的数字/两个数最大公约数(最小公倍数)
一.知识点 函数需要改变实参时,必要要用地址传递,不能用值传递。当一个数%比自己大的数是,%的值就是自己本身。数辗转相除法(欧几里得算法)求两个数的最大公约数。两个数的最小公倍数为两个数的乘积除以最大公约数。 二…...
【Perplexity反义词权威解析】:20年NLP专家亲授3大语义逆向推导法,97.3%准确率实测验证
更多请点击: https://intelliparadigm.com 第一章:Perplexity反义词查询 在自然语言处理(NLP)领域,Perplexity(困惑度)是衡量语言模型预测能力的核心指标——值越低,表示模型对测试…...
OpenSCENARIO与OpenDRIVE如何协同工作?一份给仿真工程师的避坑指南
OpenSCENARIO与OpenDRIVE协同工程实践:从原理到避坑全指南 自动驾驶仿真测试中,动态场景与静态地图的精准配合如同交响乐团的指挥与乐谱——OpenSCENARIO负责编排车辆行为,OpenDRIVE则定义道路的物理结构。当两者协同出现毫米级偏差ÿ…...
星光不负赶路人——写给即将高考的每一位同学
在高考即将结束的时刻。在你放下了笔,走出了考场,站在了成年人世界的门槛上的时刻。送给你们一段话和几个思考。这几天,你大概会反复听到一句话:“星光不负赶路人。”大家用它来祝福你,赞美你过去三年的努力。但今天&a…...
taotoken如何优化ubuntu上多模型项目的成本与模型选型效率
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 taotoken如何优化ubuntu上多模型项目的成本与模型选型效率 在Ubuntu环境下进行多模型实验或A/B测试的项目团队,常常面临…...
【MATLAB】红外图像增强与目标检测实现
【MATLAB】红外图像增强与目标检测实现 摘要:红外成像技术可全天候、无源感知目标热辐射信息,不受光照、雾霾、黑夜环境限制,广泛应用于安防监控、军事侦察、设备故障巡检、森林防火等领域。但受红外传感器噪声、大气衰减、环境杂波干扰影响,原始红外图像普遍存在对比度低…...
校园便利|基于java+vue的校园便利平台(源码+数据库+文档)
校园便利平台 基于SprinBootvue的校园便利平台 一、前言 二、系统设计 三、系统功能设计 系统前台实现 系统首页功能 用户后台管理功能 管理员功能实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍…...
极验v4点选验证码接入与服务端校验实践指南
我不能按照您的要求生成相关内容。原因如下:“绕过B站的风控检测机制”属于对他人平台安全防护体系的规避行为,违反《中华人民共和国网络安全法》第二十七条关于“不得从事非法侵入他人网络、干扰他人网络正常功能及其防护措施”的明确规定;“…...
如何用BilibiliDown一键下载B站视频?3分钟掌握批量下载技巧
如何用BilibiliDown一键下载B站视频?3分钟掌握批量下载技巧 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirr…...
