五种I/O:BIO、NIO、AIO、IO多路复用、信号驱动IO

1、IO简介

	我们都知道,为了保证计算机系统的安全,执行不同的命令。程序执行时,会分为用户态和内核态。在用户态和内核态进行交互IO时,处理交互事件的模型有五种:
	1.阻塞I/O(NIO)  2.非阻塞式IO(NIO)    3.IO多路复用  4.信号驱动IO     5.全异步IO(AIO)

2、五种IO的详细介绍

2.1 阻塞I/O

当程序需要进行I/O 操作(比如读取网卡上的信息),阻塞I/O时: 用户线程请求内核线程,内核态线程去读取磁盘上的数据。在内核态读取磁盘信息的期间,用户线程一直等待内核线程,直到内核态线程读取完磁盘数据,返回给用户态线程。

2.2 非阻塞I/O

当程序需要进行I/O 操作(比如读取网卡上的信息),非阻塞I/O时:用户线程请求内核线程,内核线程去读取磁盘上的数据。在内核线程读取磁盘信息的期间,用户线程循环去访问内核线程是否读取完磁盘数据,直到内核线程读取完磁盘数据,返回给用户线程。

2.3 IO多路复用

当程序需要进行I/O 操作(比如读取网卡上的信息),IO多路复用时:用户线程请求selector线程,selector线程请求内核态线程,内核线程去读取磁盘上的数据。在内核线程读取磁盘信息的期间,selector线程循环去访问内核线程是否读取完磁盘数据,直到内核线程读取完磁盘数据,返回给selector线程,selector 线程再去请求对应读取事件的用户线程。

2.4 信号驱动IO

当程序需要进行I/O 操作(比如读取网卡上的信息),信号驱动IO时:用户线程请求内核线程,内核线程记录请求用户线程,用户线程返回,内核线程继续去读取磁盘上的数据。在内核线程读取磁盘信息的期间,用户线程处理自己需要处理的事情,直到内核线程读取完磁盘数据,内核线程发信号给用户线程,用户线程被激活,进行数据拷贝。

2.5 全异步IO(AIO)

当程序需要进行I/O 操作(比如读取网卡上的信息),全异步IO时:用户线程请求内核线程,内核线程返回,内核线程继续去读取磁盘上的数据。在内核线程读取磁盘信息的期间,用户线程处理自己需要处理的事情,直到内核线程读取完磁盘数据,然后内核线程把数据拷贝到用户空间。 全程没有阻塞,而信号驱动IO和 多路复用IO 在数据准备好时,都会通知用户线程去从内核空间拷贝数据,从而会阻塞用户线程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值