linux学习--第七天(多路复用IO)

news2024/11/26 3:39:41

多路复用IO

-阻塞IO与非阻塞IO

    -IO模型

        IO的本质时基于操作系统接口来控制底层的硬件之间数据传输,并且在操作系统中实现了多种不同的IO方式(模型)比较常见的有下列三种:

        1.阻塞型IO模型

        2.非阻塞型IO模型

        3.多路复用IO模型

-阻塞型IO

    概念:当进程发出IO请求后,阻塞进程(让进程进入睡眠状态),资源就绪后唤醒进程继续执行(一般默认的IO操作都是阻塞型IO

    特点:会一直等待,直到数据就绪

-非阻塞型IO

        特点:程序不会等待用户输入,会立即返回

        当进程发出IO请求后,无论资源是否就绪都立即返回,相应的模型如下;

    实现非阻塞型IO,需要设置O_NONBLOCK标志

    fcntl函数通过命令字(cmd)来设置文件描述符

-多路复用IO

-多路复用IO简介

    本质:就是通过复用一个进程来处理多个IO请求

    基本思想:由内核来监控多个文件描述符是否可以进行I/O操作,如果就绪的文件描述符,将结果告知用户进程,则用户在进程相应的I/O操作

-多路复用I/O方案

    目前在linux系统有三种多路复用I/O的方案

        1.select方案

        2.poll方案

        3.epoll方案

-select多路复用IO

-设计思想

   1.通过单进程创建一个文件描述符集合,将需要监控的文件描述符,添加到这个集合中

   2. 由内核负责监控文件描述符是否可以进行读写,一旦可以读写,则通知相应的进程进行相应的IO操作

    select函数监控一组文件描述符,阻塞当前进程,由内核监测相应的文件描述符是否就绪,一旦文件描述符就绪,将就绪的文件描述符拷贝给进程,唤醒进程处理

   超时时间的说明:

        1.如果timeout之后,文件描述符集合中没有任何就绪的文件描述符,select函数就会返回0

        2.超时之后,timeout会被select函数修改,表示超时时间已经使用完

          如果想继续使用使用超时间,需要备份之前的struct timval

 超时之后,,表示没有就绪的文件描述符,此外文件描述符集合被赋值为空

因此,需要将之前的文件描述符集合进行备份

-select底层原理分析

-文件描述符集合

    文件描述符集合的数组最终在储存时,使用了位图的方式来记录相应的文件描述符,具体原理如下:

        1.数组中没有直接存储文件描述符,而是使用某一位来表示该文件描述符是否需要监控

        2.需要监控的文件描述符需要转成数组的某一个元素的某一位,然后将对应的位设置为1

    例如: fd = 60 的成员需要监控,则需要将数组的第0个成员的第 [60] bit 设置为1,当 fd = 64时,则需要将数组的第1个成员的第[0] bit 设置为1

    (从上面的文件描述符集合内管理可以分析,select最终只能存储1024个文件描述符)

select基本原理如下:

select() 函数中一共需要使用三个文件描述符集合,分别是:

        1.in: 需要进行读的文件描述符的集合

        2.out需要进行写的文件描述符的集合

        3.exp其他文件描述符集合

调用了select() 函数,内核做了如下事情:

        1.从用户空间将集合的文件描述符拷贝到内核空间

        2.循环遍历fd_set中所有的文件描述符,来检测是否有文件描述符可进行I/O操作

            1>如果文件描述符可进行I/O操作,则设置返回的文件描述符集合对应位为1(res_in,res_out,res_exp),跳出循环,直接返回。最终会赋值给in,out,exp 文件描述符集合

            2>如果没有文件描述符可进行IO操作,则继续循环检测,如果设置timeout,则在超时后返回,此时select()函数返回0

        select()函数减少了多进程/多线程的开销,但仍然有多缺点:

            1.每次调用select()函数都需要将fd集合拷问到内核空间,这个开销在fd很多时就越大

            2.每次都需要遍历所有的文件描述符集合,这个开销在fd很多时就越大

            3.支持的文件描述符只有2024

        整体流程

-poll多路复用IO

    基本原理

        1.在应用层是以struct polled数组的形式来进行管理文件描述符,在内核中基于链表对数组进行扩展

    特点:

        1.poll将请求与就绪事件通过结构体进行分开

        2.select将请求与就绪文件描述符存储在同一个集合,导致每次都需要进行重新赋值才能进行下一次监控

        3.在内核中仍然使用的是轮询的方式,与select相同,当文件描述符越来越多时,则会影响效率

        POLLIN普通数据可读

        POLLOUT普通数据可写

    总体流程

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

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

相关文章

开源2+1链动模式AI智能名片O2O商城小程序源码:线下店立体连接的超强助力器

摘要:本文将为您揭示线下店立体连接的重大意义,您知道吗?线上越火,线下就得越深入经营。现代门店可不再只是卖东西的地儿,还得连接KOC呢!咱们来看看门店要做的那些超重要的事儿,还有开源21链动模…

Authentication Lab | CVE-2019-7644 - JWT Signature Disclosure

关注这个靶场的其他相关笔记:Authentication Lab —— 靶场笔记合集-CSDN博客 0x01:JWT Signature Disclosure 前情提要 本关的考点是 JWT(Json Web Token)漏洞,JWT 是一个用于跨域认证的技术。如果你不了解 JWT&…

计算机视觉——图像修复综述篇

目录 1. Deterministic Image Inpainting 判别器图像修复 1.1. sigle-shot framework (1) Generators (2) training objects / Loss Functions 1.2. two-stage framework 2. Stochastic Image Inpainting 随机图像修复 2.1. VAE-based methods 2.2. GAN-based methods …

攻防世界----->easyre-153

做题笔记。 下载 查壳。 UPX,---脱壳。 32ida打开。 先运行一下: 查找字符校位。 管道父子?有点像此前做的那个进程互斥。。。 分析: 跟进lol ? 查看汇编窗口看看。(因为一个函数只存在一个打印函数,就很…

集合框架01:集合的概念、Collection体系、Collection接口

1.集合的概念 集合是对象的容器,定义了多个对象进行操作的常用方法。可实现数组的功能。 集合和数组的区别: 1.数组长度固定,集合长度不固定; 2.数组可以存储基本类型和引用类型,集合只能存储引用类型; …

读数据湖仓06数据集成

1. 数据湖仓中的数据集成 1.1. 数据湖仓的总体目标是为每一个人提供支持,包括从普通职员到CEO 1.2. 有了作为基础设施的基础数据,企业等组织才能实现真正的数据驱动 1.3. 提供组织所需的数据,最关键的一环在于提供集成的数据基础 1.3.1. 只…

信息安全工程师(32)认证技术方法

前言 认证技术方法是用于验证用户、设备或系统身份的各种技术手段和方法,旨在确保只有经过验证的实体才能访问系统资源,从而保护数据和系统的安全。 一、常见认证技术方法 密码认证 描述:用户通过输入预先设置的密码进行身份验证。优点&#…

The 14th Jilin Provincial Collegiate Programming Contest

题目 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long long #define pii pair<int, int> #define ld lo…

C语言 | Leetcode C语言题解之第455题分发饼干

题目&#xff1a; 题解&#xff1a; int cmp(int* a, int* b) {return *a - *b; }int findContentChildren(int* g, int gSize, int* s, int sSize) {qsort(g, gSize, sizeof(int), cmp);qsort(s, sSize, sizeof(int), cmp);int m gSize, n sSize;int count 0;for (int i …

D26【python 接口自动化学习】- python 基础之判断与循环

day26 语句嵌套 学习日期&#xff1a;20241003 学习目标&#xff1a;判断与循环&#xfe63;-36 语句嵌套&#xff1a;如何处理多重嵌套的问题&#xff1f; 学习笔记&#xff1a; 语句嵌套的用途 在条件语句中使用另外一个条件语句 在循环中使用条件语句 多重循环 总结 1…

Authentication Lab | JWT None Algorithm

关注这个靶场的其他相关笔记&#xff1a;Authentication Lab —— 靶场笔记合集-CSDN博客 0x01&#xff1a;JWT None Algorithm 前情提要 本关的考点是 JWT&#xff08;Json Web Token&#xff09;漏洞&#xff0c;JWT 是一个用于跨域认证的技术。如果你不了解 JWT&#xff0c…

<<迷雾>> 第6章 加法机的诞生(3)--三比特加法电路 示例电路

用全加器组成一个三比特加法电路 info::操作说明 鼠标单击开关切换开合状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch03-02-3-bit-adder.txt 原图 加法机的简单图示 info::操…

Python案例--数字组合

在编程和数据处理中&#xff0c;我们经常需要从给定的元素中生成所有可能的组合。本文将通过一个简单的Python程序&#xff0c;展示如何生成由四个给定数字&#xff08;0-9&#xff09;组成的所有可能的无重复三位数组合。这可以应用于多种场景&#xff0c;如密码生成、数据校验…

【MySQL实战45讲6】全局锁和表锁

文章目录 全局锁表级锁 全局锁 顾名思义&#xff0c;全局锁就是对整个数据库实例加锁。MySQL提供了一个对全局读锁的方法&#xff0c;命令是Flush tables with read lock (FTWRL) 当需要让整个库处于只读状态的时候&#xff0c;可以使用这个命令&#xff0c;之后其他线程的以下…

计算机毕业设计python+spark知识图谱课程推荐系统 课程预测系统 课程大数据 课程数据分析 课程大屏 mooc慕课推荐系统 大数据毕业设计

《PythonSpark知识图谱课程推荐系统》开题报告 一、研究背景与意义 随着互联网技术的快速发展&#xff0c;在线教育平台已成为人们获取知识、提升技能的重要途径。然而&#xff0c;面对海量的课程资源&#xff0c;用户往往难以快速找到符合自己兴趣和需求的课程。传统的课程推…

Web安全 - 安全防御工具和体系构建

文章目录 安全标准和框架1. 国内安全标准&#xff1a;等级保护制度&#xff08;等保&#xff09;2. 国际安全标准&#xff1a;ISO27000系列3. NIST安全框架&#xff1a;IDPRR方法4. COBIT与ITIL框架 防火墙防火墙的基本作用防火墙的三种主要类型防火墙的防护能力防火墙的盲区 W…

【C++前缀和】3026. 最大好子数组和|1816

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode3026. 最大好子数组和 给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个 子数组 中&#xff0c;第一个元素和最后一个元素 差的绝对值恰…

8643 简单选择排序

### 思路 简单选择排序是一种原地排序算法&#xff0c;通过在未排序部分中选择最小&#xff08;或最大&#xff09;元素并将其放置在已排序部分的末尾来进行排序。每次选择后输出当前排序结果。 ### 伪代码 1. 读取输入的待排序关键字个数n。 2. 读取n个待排序关键字并存储在数…

探索聚丙烯酸水凝胶,从制备到特性,再到3D打印实践

大家好&#xff01;今天我们来了解一种基于聚丙烯酸的自修复水凝胶——《Preparation and Characterization of Poly(Acrylic Acid)-Based Self-Healing Hydrogel for 3D Shape Fabrication via Extrusion-Based 3D Printing》发表于《Materials》。在材料科学领域&#xff0c;…

Visual Studio 字体与主题推荐

个人推荐&#xff0c;仅供参考&#xff1a; 主题&#xff1a;One Monokai VS Theme 链接&#xff1a;One Monokai VS Theme - Visual Studio Marketplacehttps://marketplace.visualstudio.com/items?itemNameazemoh.onemonokai 效果&#xff1a; 字体&#xff1a;JetBrain…