五种IO模型总结

五种模型分别为:

阻塞IO, 非阻塞IO,多路复用IO, 信号驱动IO, 异步IO

阻塞IO :调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等待这个函数返回才能进行下一步动作。
流程图为:在这里插入图片描述

作为最传统的一种IO模型,即在读写数据过程中会发生阻塞现象,典型的阻塞IO模型例子为:

data = socket.read();

如果数据没有就绪,就会一直阻塞在read方法。

非阻塞IO:非阻塞等待, 每隔一段时间就去检测IO事件是否就绪。没有就绪就可以做其他事。
流程图为:
在这里插入图片描述

典型的非阻塞IO模型一般如下:

while(true){

   data = socket.read();
 
   if(data!= error){

       处理数据

       break;
   }

}

多路复用IO:linux用select/poll函数实现IO复用模型, 这两个函数也会使进程阻塞, 但是和阻塞IO所不同的是这两个函数可以同时阻塞多个IO操作。 而且可以同时对多个读操作,写操作的IO函数进行检测。知道有数据可读或可写,才真正调用IO 操作函数
流程图为:
在这里插入图片描述

信号驱动IO:信号驱动IO:Linux用套接口进行信号驱动IO, 安装一个信号处理函数,进程运行并不会阻塞,当IO时间 就绪,进程收到SIGIO信号。然后处理IO事件。

异步IO:Linux中,可以调用aio_read函数告诉内核描述子缓冲区的大小, 文件偏移及通知的方式,然后立即返回, 当内核将数据拷贝到缓冲区后, 再通知应用程序。
流程图为:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值