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…...
实测nanobot:5分钟搭建个人AI助手,还能轻松接入QQ聊天
实测nanobot:5分钟搭建个人AI助手,还能轻松接入QQ聊天 1. nanobot核心优势解析 nanobot作为一款超轻量级个人AI助手解决方案,在技术架构和用户体验上都有显著突破。这个受OpenClaw启发的项目,仅用约4000行代码就实现了完整的智能…...
基于MATLAB平台PCA的人脸识别:开启识别新征程
基于MATLAB平台PCA的人脸识别,程序已调通,可将自己的数据替换进行识别。 得到识别准确率结果。最近在研究人脸识别技术,基于MATLAB平台利用PCA(主成分分析)实现了一个人脸识别程序,现在跟大家分享分享。 PC…...
夸克扫码登录
kefu16665...
GRS认证实操干货:TC交易证书全流程解析(源头供应商必看)
一、前言:GRS证书与TC的核心关联(新手必懂)在再生行业GRS认证体系中,多数源头供应商存在一个核心认知误区:认为拿到GRS范围证书(SC)就完成了合规闭环,实则不然。GRS证书(…...
OFA图像描述系统实战:快速搭建图片转文字工具,避免常见权限错误
OFA图像描述系统实战:快速搭建图片转文字工具,避免常见权限错误 1. 项目介绍:让图片自己“说话”的智能工具 你有没有遇到过这样的场景?手头有一堆产品图片,需要为每张图配上文字描述,手动编写不仅耗时耗…...
高校AIGC检测越来越严格背后的原因:政策趋势和学生应对建议
高校AIGC检测越来越严格背后的原因:政策趋势和学生应对建议 超过六成高校已经把AIGC检测纳入论文审查流程。但真正了解检测原理的人不到一成。 我判断:高校AIGC检测趋严这件事,大多数人的恐慌来自不了解。搞清楚原理,应对起来没…...
Laravel Stats Tracker与Google Analytics对比分析:自建统计系统的优势
Laravel Stats Tracker与Google Analytics对比分析:自建统计系统的优势 【免费下载链接】tracker Laravel Stats Tracker 项目地址: https://gitcode.com/gh_mirrors/tr/tracker 在网站分析和用户行为跟踪领域,Google Analytics无疑是业界标杆&am…...
第四天(实习无忧)
##文件结束的判定,编译与链接##1.文件结束的判定:fgetc(pf)读取结束返回EOF,fgets(arr,100,pf)读取结束返回NULL,fread(arr,sizeof(int),n,pf)读取结束返回对应的n。而成功读取到文件尾结束可以用feof(pf)判断,若中途因…...
118. 从 RKE1(Docker)迁移到 RKE2(容器化)后,JSON 日志未能正确解析
Situation 地理位置After migrating the cluster from RKE1 to RKE2, JSON logs sent to Elasticsearch are not being split into fields correctly. 在将集群从 RKE1 迁移到 RKE2 后,发送到 Elasticsearch 的 JSON 日志没有被正确划分为字段。 Resolution 结局T…...
鸣潮智能辅助工具:深度学习驱动的游戏自动化解决方案
鸣潮智能辅助工具:深度学习驱动的游戏自动化解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 价值定位…...
