阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O、异步I/O

博客探讨了POSIX定义的同步与异步I/O,指出I/O操作是计算机中最慢的部分,主要讨论了五种I/O模型:阻塞I/O会导致线程阻塞,非阻塞I/O不阻塞但可能需要多次系统调用,I/O复用如select/poll/epoll允许单线程处理多个连接,信号驱动I/O通过信号通知IO完成,异步I/O则在后台完成操作且不阻塞调用者。
摘要由CSDN通过智能技术生成

一、POSIX定义的同步与异步I/O:

可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)把同步I/O定义为导致进程阻塞直到I/O完成的操作,反之则是异步

实际上操作系统大多数时候采用的都是同步I/O

二、I/O是缓慢的

I/O操作绝对是计算机操作中中最慢的,例如访问RAM可以达到纳秒(ns)级别,的传输速度一般为GB/s,而在磁盘或网络上访问时(I/O),消耗的时间级却是毫秒(ms)级别的,传输速度MB/s起步,乐观情况下能达到GB/s。

三、缓慢是技术限制?

I/O操作对cpu而言代价并不高,单它在请求发送的时刻和操作完成时之间增加了一个延迟,除此之外还要考虑认为因素对于,输入输出是与人为有很大关系的,输入往往来自于一个真实的人,例如单击按钮或者在实时聊天中发送的消息,因此I/O的速度和频率不仅取决于技术方面,事实上,人为因为导致的缓慢还要比技术上的限制更加耗时,甚至高了几个数量级

四、有那些I/O模型呢?

一、阻塞I/O

在传统的阻塞I/O编程中,与I/O请求相对应的函数的调用将会阻塞线程的执行,伪代码

//阻塞线程直到数据是有效的
date = socket.read();
//当data是有效的
print(data);

对于web服务而言,使用阻塞I/O实现将无法处理同一线程中的多个连接服务,socket上的每个I/O服务将阻止其他任何连接的处理,因此在Web服务中常常为每个socket开启一个线程,这样,当某一个线程被I/O操作阻塞时,不会影响其他请求的可用性

  • 阻塞io模型
    在这里插入图片描述

二、非阻塞I/O

大多数操作系统支持另一种访问资源的机制,在此操作模式下,系统调用总是会立即返回,而无需等待数据读取或者写入,如果在调用的时候没有用可以使用的结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值