一顿饭的事儿,搞懂了Linux5种IO模型

news2024/12/23 13:39:20

大家好,我是老三,人生有三大难题,事业、爱情,和

——这顿吃什么!

人在家中躺,肚子饿得响,又到了不得不吃的时候,这顿饭该怎么吃?吃什么呢?

Linux里有五种IO模型:阻塞IO非阻塞IO多路复用IO信号驱动式IO异步IO,我发现这五种IO模型,其实能和吃饭这件事关联起来。

阻塞IO(Blocking I/O)

阻塞IO是最常见的IO模型。

当发起一个IO操作时,比如读取数据,系统会调用read()函数。如果请求的数据没有准备好,此时进程会被挂起(blocked),进入等待状态。直到数据准备好,而且复制到应用进程的缓冲区,这时候才会返回。

从调用到返回,整个时间段都是阻塞的,所以被称为阻塞IO。

阻塞IO

就像是手机没电的时候,去饭馆吃饭,我点完菜,只能等着厨师做好,服务员端上来,我才能愉快干饭。这段时间,我就只能坐在座位上干等。

非阻塞IO(Non-Blocking I/O)

阻塞IO,还是比较浪费资源的,那么非阻塞IO就来了。

所谓非阻塞IO,是在调用IO操作时,如果缓冲区没有数据的话,直接返回一个错误码。应用进程需要不断轮询,来检查数据是否准备好。数据准备好了,就返回数据。

非阻塞IO

就像是我奢侈一把,想吃个西餐,于是就去了肯德基,点完餐,我就可以坐着刷刷手机。当然,我还需要时不时地看看我的餐是不是已经备好,餐备好了,就去取一下。

多路复用IO(I/O Multiplexing)

虽然非阻塞IO相比阻塞IO,性能提升了很多,但是轮询过程中,还是有大量的系统调用,上下文切换的开销比较大。

那么,多路复用IO就来了。

多路指的是多个数据通道,复用指的是一个进程可以同时监控多个文件描述符(比如socket),当某个文件描述符状态发生变化(比如变得可读或可写),多路复用的函数将返回变化的文件描述符。

这样,在数据传输过程中,同一个进程中不同的任务都能被处理。特点是在数据传输过程中,进程能够同时处理多个任务,提高了程序的效率。

select、poll、epoll 等都是 I/O 多路复用的具体实现。

以select/poll为例,进程通过将一个或多个fd传递给select或poll系统调用,阻塞在select操作上,这样select/poll可以侦测多个fd是否处于就绪状态。当有fd就绪时,立即回调函数rollback,接下来就可以进行读取。

多路复用IO

就像是我想吃顿好的,于是选择去吃自助餐,自助餐有很多餐区,我先看看哪个餐区有我想吃的菜,然后端着盘子去取就行了,一个人就可以取多个菜,肉、蔬菜、水果,什么都能吃一点,而且不用怎么等。

信号驱动式IO(Signal-Driven I/O)

信号驱动式IO利用信号机制来进行数据传输。

进程首先告诉内核,当数据准备好时,请发送一个SIGIO信号。进程继续执行其他任务,等到收到信号后,再开始进行数据传输。

信号驱动IO

就像是我去吃饭,外带,跟服务员打声招呼,餐好了通知我,这时候我就可以去干其它事情,餐备好之后,服务员通知我,我取餐就行了。

异步IO(Asynchronous I/O)

异步IO是指当发起一个IO操作后,系统会立即返回。异步IO操作在后台进行数据传输,数据传输完成后,系统将通知进程。这样,在整个数据传输的过程中,进程都可以执行其他任务,不需要等待。

异步IO

就像是准备吃饭了,我自己懒得动,直接在某团上点个餐,点完之后爱干啥干啥,等着快递小哥给我送到就行了。


可以看到,阻塞非阻塞主要指的是等待数据这个过程应用进程需不需要挂起,同步异步指的是等待数据和数据拷贝这两个过程应用进程需不需要挂起,只有异步IO做到了完全异步。

那么最后一个问题,我到底吃了啥?——

搞点腊肉,煮了个面条,真香!

腊肉




参考:

[1].《Netty权威指南》

[2]. 《Netty核心原理与RPC实践》

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

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

相关文章

【笔记】【HTTP】《图解HTTP》第1章 了解Web及网络基础

前言 有输入就要有产出,该笔记是本人看完《图解HTTP》后对每章涉及到的知识进行汇总博客将会已书的每章为一篇发布,下一篇博客发布时间不确定笔记中有些个人理解后整理的笔记,可能有所偏差,也恳请读者帮忙指出,谢谢。…

在Notion AI 中轻松打造您的AI私人助理,提供卓越的工作体验

大家好,我是瓜叔。 相信平时喜欢做笔记的人对notion 选应该不陌生近年来越来越多人开始把notion 选当做他们的主力笔记软件。 我自己也用了约4年的时间。如果你也是notion的爱好者但还不知道notion AI是什么。那这篇文章,我会分享我是如何实际操作使用技…

Windows terminal+wsl+ohmyzsh+powerlevel10k打造更美丽的终端

安装wsl 安装 WSL 和 Linux 的默认 Ubuntu 发行版。 了解详细信息https://learn.microsoft.com/zh-cn/windows/wsl/install。 还可以使用此命令通过运行 wsl --install 来安装其他 Linux 发行版。 若要获取发行版名称的有效列表,请运行 wsl --list --online。 wsl -…

AIOps探索 | 新形势下,中小银行如何学好数字化转型“必修课”?

一、强化数智驱动 推进转型升级 2023年4月21日,在江苏省支付清算服务协会、山东省支付清算协会的大力支持下,由金科创新社(鑫知)主办的“2023农村中小银行数字化转型研讨会”在江苏南京成功举办。 ​本次大会以“强化数智驱动 推…

深入浅出堆—C语言版【数据结构】

二叉树概念博客:http://t.csdn.cn/XIW84 目录 1. 了解堆 1.1 堆的概念 1.2 堆的性质: 1.3 堆的结构图片 1.3.1 小堆 1.3.2 大堆 2. 堆的实现 2.1 插入数据进堆 2.2 向上调整函数 2.3 堆的删除 2.4 向下调整 3. 堆的应用 3.1 建堆&#xff…

赚钱单页产品

今天写一篇文章,讲一个最近看的赚钱单页产品。 先下定义,什么是赚钱的单页产品: 能赚钱:需求切的准单页产品:通常只有少数几个页面就完成了产品的核心功能,一个程序员可以在1天左右,完成开发 先…

快速理解基本的cookie、session 和 redis

一、Cookie 1、什么是Cookie 1、Cookie实际上是一小段的文本信息,是一种keyvalue形式的字符串。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。 2、当浏览器再请求…

跨境电商系统开发需要注意的问题

跨境商城系统开发需要考虑许多特殊问题,比如涉及跨国支付、物流、法律和政策、文化差异等等。下面将列出一些重要的问题,来帮助您更有效地开发跨境电商系统。 1、税务问题 当涉及跨国交易时,涉及不同国家和地区的税收政策和税率。特别是在国…

2023亚马逊云科技中国峰会开启报名 6月27-28日上海见

2023年6月27-28日,2023亚马逊云科技中国峰会,亚马逊云科技将聚焦构建新技术加速的产品创新、新架构提升的业务弹性、云计算引领的创新模式,围绕价值加速实现,企业敏捷稳健,行业全新机遇等热门话题,携手众多…

( 位运算 ) 136. 只出现一次的数字 ——【Leetcode每日一题】

❓136. 只出现一次的数字 难度:简单 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量…

学习dtw-python库内容 动态弯曲距离(DTW)具体实现

文章目录 一、install 数据包二、函数功能三、函数的参数以及含义四、具体实现 一、install 数据包 简单的pip install一下就好了,注意最后提示Successfully installed dtw-python-1.3.0 pip install dtw-python二、函数功能 执行 DTW 算法,并计算两个…

网页端操作提示「msg.js」库简介

这段时间我正在完成我的第一本个人图书,期间做了很多的案例,最近需要在网页端完成一个关于「恶意文本检测」的案例,为了让该案例表现的更加易用简洁、对用户友好,我需要在页面中添加一些用户操作提示信息,比如「正在加…

【HMS Core】Health Kit想要查看数据是来自用户的哪个设备,如何查看?

【问题描述1】 如何查看运动健康数据是来自用户的哪个设备? 【解决方案】 可以通过返回的数据中携带的dataCollectorId来查询提供数据的设备信息: 请求示例(以查询睡眠记录详情为例): 1、查询睡眠记录并关联睡眠状…

后端使用phantomjs对页面进行截图

最近碰到这样一些需求,后端需要对某个图表页面进行动态截图,将截图通过邮件发送到指定邮箱进行每日提醒。 这就需要用到无界浏览器进行此类操作。常见的无界浏览器有以下几种,知识来源于chatgpt3.5: Headless Chrome - Google C…

NC – 靶向特定功能的神经元细胞类型治疗脑部疾病

神经元是大脑的主要功能单位。这些细胞中传递的信号——以电波的形式——导致所有思维、感觉、运动、记忆和情感。 塞达斯-西奈医学中心的研究人员利用计算机模型来弥合“试管”神经元数据和这些细胞在大脑中的功能之间的差距。他们的研究有助于开发靶向特定功能的神经元类型治…

如何吸引主流媒体报道,强势刷屏?

传媒如春雨,润物细无声,大家好 五一小长假已经过去好几天了,大家渐渐的从假期舒适的闲暇转到正常的工作生活中了,但利用五一热点宣传的余温还在继续,今天胡老师就i注意到一篇题为:【强势刷屏!“…

【笔记】【HTTP】《图解HTTP》第2章 简单的HTTP协议

前言 有输入就要有产出,该笔记是本人看完《图解HTTP》后对每章涉及到的知识进行汇总博客将会已书的每章为一篇发布,下一篇博客发布时间不确定笔记中有些个人理解后整理的笔记,可能有所偏差,也恳请读者帮忙指出,谢谢。…

Java每日一练(20230509) 下一个排列、分隔链表、随机指针链表

目录 1. 下一个排列 🌟🌟 2. 分隔链表 🌟🌟 3. 复制带随机指针的链表 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日…

操作系统—— 精髓与设计原理--期末复习

一、计算机系统概述 1、基本构成 计算机有四个主要的结构化部件: ①处理器(Processor):控制计算机的操作,执行数据处理功能。当只有一个处理器时,它通常指中央处理器(CPU) ②内存…

VINS_FUSION的EVO评价

一、虚拟机和windows桌面可以复制粘贴的方法 1)sudo apt-get autoremove open-vm-tools 2)sudo apt-get insall open-vm-tools-desktop 3)reboot 二、算法精度评价工具EVO 安装参考博文: 视觉SLAM基础:算法精度评…