五种IO模型

1、阻塞IO
(1)概念:在内核将数据准备好之前,系统调用会一直等待。所有的套接字,默认情况都是阻塞方式。
(2)阻塞IO的工作流程:
在这里插入图片描述
2、非阻塞IO
(1)概念:如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。
(2)非阻塞的工作流程:
在这里插入图片描述
注意:非阻塞IO往往需要程序员以循环的方式反复尝试读写文件描述符,这个过程称为轮询。这个过程对CPU来说是较大的浪费,一般只有在特定的场景下才使用。
3、信号驱动IO
(1)概念:内核将数据准备好的时候,使用SIGIO信号通知应用程序进行IO操作。
(2)信号驱动IO的工作流程:
在这里插入图片描述
4、IO多路转接
(1)概念:IO多路转接与阻塞IO相似,不同的是IO多路转接能够同时等待多个文件描述符的就绪状态。
(2)IO多路转接的工作流程:
在这里插入图片描述
5、异步IO
(1)概念:由内核在数据拷贝完成时,通知应用程序(而信号驱动是告诉应用程序何时可以开始拷贝数据)。
(2)异步IO的工作流程:
在这里插入图片描述
6、小结
(1)任何IO过程中都包含两个步䠫:第一是等待;第二是拷贝。在实际的应用场景中等待消耗的时间往往都远远高于拷贝的时间,所以让IO更高效的最核心办法是减少等待的时间。
(2)网络IO好比钓鱼,钓鱼的人就是一个应用进程,等待鱼上钩就是网络中等待数据准备好的过程,鱼上钩了,把鱼拉上岸就是内核复制数据阶段。
1)阻塞IO模型就好比我们去钓鱼,抛竿之后就一直在岸边等,直到等待鱼上钩,然后再一次抛竿,等待下一条鱼上钩……等待的时候,什么事情也不做。
2)非阻塞IO就好比我们抛竿入水之后就看下鱼漂是否有动静,如果没有鱼上钩,就去干点别的事情,过一会儿又来看看鱼漂是否有鱼上钩。这样往返的检查又离开,直到鱼上钩,再进行处理。
3)信号驱动IO就好比我们给鱼竿上挂一个铃铛,当有鱼上钩的时候,这个铃铛就会被碰响,就把鱼拉上岸来。
4)多路转接IO就好比一个人抛下多根鱼竿,只要其中一根鱼竿有鱼上钩就把它拉上岸来,这样做的好处是减少了等待的时间。
5)异步IO就好比钓鱼人雇了一个人给他钓鱼,等鱼上钩,然后把鱼拉上岸来之后再告诉钓鱼的人。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值