Unix网络I/O模型

想了解同步、异步、阻塞、非阻塞,请看我的另一篇文章:通俗理解同步、异步、阻塞、非阻塞_γìńɡ雄尐年ぐ的博客-CSDN博客同步异步,阻塞非阻塞是完全不同的概念。同步与异步同步、异步描述的是多个线程之间的协作关系,线程之间要么是同步,要么是异步同步 只要一段调用开始执行,就必须要得到执行结果,然后才能继续后面的操作。这个结果的获取,要么是傻等,要么是轮询。例如:以下调用方法a执行3秒,方法b执行4秒,c最终等于a+b,同步调用,b的执行必须等待a执行完,于是该调用一共执行3+4+1=8秒。c开始执行的时候a、b已经得到执行结果,因此c不用关心a、b结果的问题,直接...https://blog.csdn.net/qq_26012495/article/details/119721697?spm=1001.2014.3001.5501

I/O模型

Unix下共有5中可用I/O模型

  • 阻塞式I/O ---------------【同步】
  • 非阻塞式I/O ------------【同步】
  • I/O复用 ------------------【同步】
  • 信号驱动式I/O ---------【同步】
  • 异步I/O ------------------【异步】

阻塞式I/O模型

        最流行的I/O模型是阻塞式I/O(blocking I/O)模型,默认情况下,所有socket都是阻塞的。就是我发起一个调用,然后进程就投入睡眠,啥也干不了,一直等 直到结果返回,这个睡眠的过程就叫阻塞。

非阻塞式I/O模型

        轮询。发起一个调用,不把进程投入睡眠,而是立即返回一个EWORULDBLOCK错误,在这中间用户的I/O操作永远不会被阻塞。但是你不知道它啥时候成功,让CPU不断的去轮询:你好了吗?你好了吗?直到他好了。

I/O复用模型

        以调用select、poll、epoll等函数,这些函数本身都是阻塞的,当调用来,不必把整个I/O给阻塞了,而是用函数来等,I/O系统还能正常处理其他调用。而I/O多路复用与多线程相比最大的优势是不必创建新的进程/线程,也不用维护,节省系统开销。

select函数:是实现IO多路复用的一种方式。

信号驱动式I/O模型

        开启信号驱动I/O功能,安装信号处理函数。

        当调用来了,内核去准备数据,而不会阻塞线程,准备好了之后,内核发出SIGIO信号通知进程来处理,但处理过程依然是阻塞的。

异步I/O模型

        发起一个调用,进程通知内核工作,内核立刻返回,不会阻塞进程;当内核真正处理完后,通知进程,真正做到了异步。

总结

除了异步I/O是异步的,其余均为同步。

  • 阻塞式I/O:I/O整个被卡住,傻傻的等
  • 非阻塞式I/O:虽然没有被卡住,但一直轮询看好了没
  • I/O复用:有个函数来帮你卡住,虽然没有卡住整个I/O系统,但每个调用依然是阻塞的
  • 信号驱动式I/O:准备数据阶段不需要你参与,但日后处理还是阻塞的跑不了,内核通知你啥时候开始启动I/O操作
  • 异步I/O:全程就开始的时候参与一下,结尾参与一下,中间爱干啥干啥。内核通知你I/O操作啥时候完事。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值