驱动的三种IO模型

news/2024/11/14 17:26:10/

阻塞IO概述:

例如读取硬件数据时,如果硬件数据没有准备好,此时进程阻塞在read()函数位置直到硬件数据就绪,通过read()函数读取硬件数据,程序向下执行,进程阻塞等待数据时处于休眠态。

阻塞IO特点:

最常用,简单,但效率最低的。常见一些read,write等函数。

非阻塞IO概述:

例如读取硬件数据时,不管硬件数据有没有准备好,此时进程都不会阻塞在read()函数位置,而是继续往下执行。如果想要获取到有效数据,需要轮询

非阻塞IO特点:

只判断此时此刻情况,不会影响进程其他操作

IO多路复用概述:

在一个进程中同时监听多个硬件的数据,就需要使用IO多路复用,IO多路复用的实现机制有三种:select/poll/epoll。IO多路复用的基本思想是在用户空间中将监听的事件文件描述符添加到事件集合中,调用函数进行判断集合中文件描述符对应的硬件数据是否准备就绪,如果没有一个事件发生,将进程切换到休眠状态(可中断休眠状态)。当有一个或者多个硬件数据准备好了,将休眠的进程唤醒,对准备好的硬件数据进行读写

IO多路复用特点:

        1> 在单进程单线程的情况下,同时处理多个硬件数据输入输出请求。

        2> 由于不需要创建新的进程和线程,减少系统的资源开销,减少上下文切换的次数。

Select:阻塞函数,让内核检测指定文件描述符集合中,是否有文件描述符准备就绪

 当文件描述符准备就绪后,该函数解除阻塞。

 当事件产生后,集合中会只剩下触发事件的文件描述符。

操作集合函数有

void FD_CLR(int fd, fd_set *set);      将fd从集合中剔除

int  FD_ISSET(int fd, fd_set *set);     判断fd是否在集合中,在返回真,不在返回假

void FD_SET(int fd, fd_set *set);      将fd加入到集合中

void FD_ZERO(fd_set *set);          清空集合

Poll:阻塞函数,让内核检测指定文件描述符集合中,是否有文件描述符准备就绪

 当文件描述符准备就绪后,该函数解除阻塞。

Epoll:一颗树、一张表、三个接口


http://www.ppmy.cn/news/92579.html

相关文章

@Transactional 注解概述(IT枫斗者)

Transactional 注解概述(IT枫斗者) Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用Transactional注解时需要注意许多的细节,不然你会…

二肽二氨基丁酰苄基酰胺二乙酸盐/Dipeptide Diaminobutyroyl Benzylamide Diacetate/SYN-AKE

作用机理----二肽二氨基丁酰苄基酰胺二乙酸盐 类蛇毒三肽通过松弛面部肌肉而作为有效的平滑和祛皱活性产品, 该活性三肽作用方式与 Temple Viper 毒蛇毒液的神经肌肉阻断化合物Waglerin 1 一致。类蛇毒三肽作用于突触后膜, 是肌肉烟碱乙酰胆碱受体(nmAChR)可逆转的拮抗剂。类蛇…

demlia机器人建模与装配

1 可以用catia中的模型或其他三维建模软件中的模型转化为step格式即可 2 在demlia中打开 3 打开单个零件保存为cgr格式 对机械臂所有零件都做同样的转化 4 新建装配设计,并导入带有坐标的零件 将转化后的零件都选中导入即是装配好的 5 将模式修改为device buildin…

在应用层和网络层之间搭建桥梁

我们在排查过程中,第一个需要做的就是把应用层信息和网络层、传输层两层的信息一一对应起来,说得更准确些,就是需要把应用层信息翻译成网络层和传输层信息。 应用层信息包括以下内容: 应用层日志,包括成功日志、报错日…

Visual Studio 远程调试工具(Remote Debugger)使用方法

一、关于Remote Debugger 当项目在测试环境上有bug,需要运行代码调试一下,这时就需要在测试环境上安装一个调试工具(Remote Debugger),然后在本地运行代码,远程链接到测试环境服务器来调试代码&#xff1b…

类型转换(2)

类型转换 知识回顾static_castconst_castreinterpret_cast 类型转换dynamic_cast动态转换和静态转换区别动态转换的使用 知识回顾 static_cast 静态转换应用范围: 基本数据类型的转换,但不能实现基本数据类型指针的转化,但是可以将无类型转…

同城跑腿系统源码,点对点配送,帮你省时省力

随着互联网的发展,越来越多的人开始依赖网络来解决生活中的各种问题。而同城跑腿系统就是其中一个受欢迎的解决方案。 ​同城跑腿系统是指一种基于互联网的服务,通过在线平台将用户和服务提供者连接起来,以便用户可以轻松地安排他们的日常任务…

Python实战基础10-正则表达式

1、正则表达式 在处理字符串时,经常会有查找符合某些复杂规则的字符串需求。正则表达式就算用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 1.1 行定位符 行定位符就是用来描述字符串的边界,“A”表示行的开始&…