• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > Linux IO的水平触发和边缘触发的区别

Linux IO的水平触发和边缘触发的区别

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了linux io监控,linux io模型,linux io测试,linux io.h,linux io优化等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Linux IO的水平触发和边缘触发的区别

    在linux的IO多路复用中有水平触发,边缘触发两种模式,这两种模式的区别如下:

     水平触发:如果文件描述符已经就绪可以非阻塞的执行IO操作了,此时会触发通知.允许在任意时刻重复检测IO的状态.select,poll就属于水平触发.

     边缘触发:如果文件描述符自上次状态改变后有新的IO活动到来,此时会触发通知.在收到一个IO事件通知后要尽可能多的执行IO操作,因为如果在一次通知中没有执行完IO那么就需要等到下一次新的IO活动到来才能获取到就绪的描述符.信号驱动式IO就属于边缘触发.

     写过单片机的人可以从另一方理解水平触发和边缘触发的区别:

     水平触发:就是只有高电平(1)或低电平(0)时才触发通知,只要在这两种状态就能得到通知.上面提到的只要有数据可读(描述符就绪)那么水平触发的epoll就立即返回.

    边缘触发:只有电平发生变化(高电平到低电平,或者低电平到高电平)的时候才触发通知.上面提到即使有数据可读,但是io状态没有变化epoll也不会立即返回.

    epoll既可以采用水平触发,也可以采用边缘触发.

    大家可能还不能完全了解这两种模式的区别,我们可以举例说明:一个管道收到了1kb的数据,epoll会立即返回,此时读了512字节数据,然后再次调用epoll.这时如果是水平触发的,epoll会立即返回,因为有数据准备好了.如果是边缘触发的不会立即返回,因为此时虽然有数据可读但是已经触发了一次通知,在这次通知到现在还没有新的数据到来,直到有新的数据到来epoll才会返回,此时老的数据和新的数据都可以读取到(当然是需要这次你尽可能的多读取).所以当我们写epoll网络模型时,如果我们用水平触发不用担心数据有没有读完因为下次epoll返回时,没有读完的socket依然会被返回,但是要注意这种模式下的写事件,因为是水平触发,每次socket可写时epoll都会返回,当我们写的数据包过大时,一次写不完,要多次才能写完或者每次socket写都写一个很小的数据包时,每次写都会被epoll检测到,因此长期关注socket写事件会无故cpu消耗过大甚至导致cpu跑满,所以在水平触发模式下我们一般不关注socket可写事件而是通过调用socket write或者send api函数来写socket,说到这我们可以看到这种模式在效率上是没有边缘触发高的,因为每个socket读或者写可能被返回两次甚至多次,所以有时候我们也会用到边缘触发但是这种模式下在读数据的时候一定要注意,因为如果一次可写事件我们没有把数据读完,如果没有读完,在socket没有新的数据可读时epoll就不回返回了,只有在新的数据到来时,我们才能读取到上次没有读完的数据。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

</div>

您可能想查找下面的文章:

  • Linux IO的水平触发和边缘触发的区别

相关文章

  • Linux系统中bash shell编程的10个基础问题讲解
  • Linux bash Shell中的变量类型详解
  • 一个shell写的ping函数
  • Shell脚本实现的阳历转农历代码分享
  • linux下怎么解压.tar.gz .tar.bz2命令
  • Linux下Oracle归档日志自动清理脚本代码(sh)
  • Linux shell脚本输出日志笔记整理(必看篇)
  • Linux base shell重定向详解
  • Shell脚本切割tomcat的日志文件
  • Linux下实现SSH免密码登录和实现秘钥的管理、分发、部署SHELL脚本分享

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Shell时间运算及时间差计算方法
    • 浅谈Linux 脚本 sh 和 ./ 的区别
    • vim快捷键大全
    • linux下实现ftp自动备份shell脚本
    • 实现自动清除日期目录shell脚本实例代码
    • CentOS下redis自启动shell脚本
    • Shell脚本判断Apache进程是否存在
    • Shell正则表达式之grep、sed、awk实操笔记
    • shell脚本运行5秒后自动退出的代码
    • shell备份文件、重命名文件、删除指定文件的3个脚本分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有