信号驱动和异步驱动的区别

5种I/O模型:

1.阻塞I/O

2.非阻塞I/O

3.异步I/O

4.信号驱动I/O

5.I/O复用

信号驱动和异步驱动的区别

  信号驱动IO是指:进程预先告知内核,使得 当某个socketfd有events(事件)发生时,内核使用信号通知相关进程。

  异步IO(Asynchronous IO)是指:进程执行IO系统调用(read / write)告知内核启动某个IO操作,内核启动IO操作后立即返回到进程。IO操作即内核当中的服务例程。

  异步I/O和信号驱动I/O的区别很容易被混淆。前者与后者的区别在于启用异步I/O意味着通知内核启动某个I/O操作,并让内核在整个操作(包括数据从内核复制到用户缓冲区)完成时通知我们。也就是说,异步I/O是由内核通知我们I/O操作何时完成,即实际的I/O操作也是异步的;而 信号驱动I/O是由内核通知我们何时可以启动一个I/O。

  I/O究竟什么时候能用这个信息实际上只有内核才能 事先知道,因为是内核在最终处理系统中的所有打开的描述符。

  信号驱动I/O模型

  内核:I/O能用了。

  进程:接受到I/O能用的消息并执行接下来的操作。

  异步I/O模型

  内核:等待这个I/O有消息了,接受到数据。

  进程:从缓存中得到数据。

  信号驱动的作用在于在等待I/O可用的过程中可以执行其它的指令,这种方法从理论上看 倒是不错。由于进程已经休眠,就不会再占用CPU,仅当I/O可用时它才恢复执行。但是这种方法的问题在于信号处理的开销有点大。若只是少数的请求还没有问题,若是每分钟收到100个请求,那就几乎一直都在捕获信号。每秒钟捕获上百个信号的开销是相当大的,不单是进程,对于内核发送信号的开销而言也是一样的。

  因此,在高性能的服务器编程中,用异步I/O来处理多个I/O更为高效。当然,也可以用I/O复用模型来实现(epoll是一个相当高效的方法),但是对于Regular File来说,是不能使用epoll的,因为不能设置非阻塞模式(O_NOBLOCK 方式对于传统文件句柄是无效的),这个时候,异步I/O是一个很不错的选择。

时间: 2024-10-09 03:43:58

信号驱动和异步驱动的区别的相关文章

Socket层实现系列 — 信号驱动的异步等待

主要内容:Socket的异步通知机制. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 概述 socket上定义了几个IO事件:状态改变事件.有数据可读事件.有发送缓存可写事件.有IO错误事件. 对于这些事件,socket中分别定义了相应的事件处理函数,也称回调函数. Socket I/O事件的处理过程中,要使用到sock上的两个队列:等待队列和异步通知队列,这两个队列中 都保存着等待该Socket I/O事件的进程. Q:为什么要使用两个队列,等待

arm驱动linux异步通知与异步IO【转】

转自:http://blog.csdn.net/chinazhangzhong123/article/details/51638793 <[ arm驱动] linux异步通知与 异步IO>涉及内核驱动函数二个,内核结构体一个,分析了内核驱动函数二个:可参考的相关应用程序模板或内核驱动模板二个,可参考的相关应用程序模板或内核驱动三个 描述:设备文件IO访问:阻塞与非阻塞io访问,poll函数提供较好的解决设备访问的机制,但是如果有了异步通知整套机制就更加完整了 一.阻塞 I/O,非阻塞IO,异步

深入浅出~Linux设备驱动之异步通知和异步I/O

在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问.因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似“中断”的异步通知所取代.异步通知类似于硬件上的“中断”概念,比较准确的称谓是“信号驱动的异步I/O". 1.异步通知的概念和作用 影响:阻塞--应用程序无需轮询设备是否可以访问 非阻塞--中断进行通知 即:由驱动发起,主动通知应用程序 2.linux异步通知编程 2.1 linux信号 作用:linux系统中,异步通知使用信号来实现

竞争的关键驱动的异步通知

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/24326603 说起异步通知,简单点的理解就是:曾经都是应用程序主动看按键是否按下云云的. . . 这回应用程序架子大了.说老子才不去呢. 把任务给了驱动. 然后驱动发现按键按下.屁颠屁颠的去通知应用程序. 一.驱动代码 假设你看了前几篇文章.这个代码对你来说是很easy的,所修改的东西很的少. #include <linux/module.h> #include <l

设备驱动的异步加载 —— 示例分析(1)

li {list-style-type:decimal;}ol.wiz-list-level2 > li {list-style-type:lower-latin;}ol.wiz-list-level3 > li {list-style-type:lower-roman;}blockquote {padding:0 12px;padding:0 0.75rem;}blockquote > :first-child {margin-top:0;}blockquote > :last-

电压驱动和电流驱动

前言 主电路和控制电路之间,用来对控制电路的信号进行放大的中间电路,称为驱动电路. 驱动电路可以分为电压驱动和电流驱动.那么电压驱动和电流驱动的区别有哪些? 电压驱动 一些电子器件,如电子管和场效应管,输入的电流非常非常小,都是纳安甚至皮安级的,都可以忽略不计了,输出状态完全取决于输入的电压高低变化,包括用场效应管工艺制成的逻辑器件(CMOS电路),都是电压驱动的. 电流驱动 像双极性晶体管等电子器件输出状态完全取决于输入的电流大小,输入的电流一般是微安至毫安级的,包括用双极性晶体管工艺制成的逻

《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载

注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架ServerSuperIO教程>2.服务实例的配置参数说明 <连载 | 物联网框架ServerSuperIO教程>- 3.设备驱动介绍 <连载 | 物联网框架ServerSuperIO教程>-4.如开发

字符设备驱动、平台设备驱动、设备驱动模型、sysfs的关系

Linux驱动开发的童鞋们来膜拜吧:-)  学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sysfs等相关概念和技术.对于初学者来说会非常困惑,甚至对Linux有一定基础的工程师而言,能够较好理解这些相关技术也相对不错了.要深刻理解其中的原理需要非常熟悉设备驱动相关的框架和模型代码.网络上有关这些技术的文章不少,但多是对其中的某一点进行阐述,很难找到对这些技术进行比较和关联的分析.对于开发者而言,能够熟悉某一点并分享出来已很难得,但对于专注传授技术和经验给

展讯7731平台驱动调试总结-驱动配置部分

转载至:http://blog.csdn.net/bmw7bmw7/article/details/46126223 展讯7731平台驱动调试总结-驱动配置部分 1. 关键配置文件路径 1). 项目板级配置:idh.code/device/sprd/scx35_sp7731geaplus_pad_qhd/文件夹内各文件 ⑴.BoardConfig.mk---板级宏配置文件.包括设置该板(项目)所使用的uboot/kerenl全局配置宏文件,摄像头接口类型.分辨率等参数,所使用的重力加速度.光线传