linux五种IO模型

同步和异步的区别:

同步和异步的区别

同步:程序从上往下执行
异步:程序从上往下执行会有多个分支共同执行(即开多个线程)。

在web项目中

因为web项目是基于请求和响应来做的。在同步的情况下,代码从上往下执行,如果其中某个方法耗时很长 ,会导致客户端一直转圈,不能及时收到回复。

如何解决:采用多线程或者mq技术。但此种情况存在一些问题:采用多线程的情况下不能及时拿到返回结果。

多线程或者mq情况下解决方案: 请求进来以后,根据请求的id设置一个状态标志,如果查询成功以后,标志设为true,否则为false。在false的情况下返回补救信息,比如:正在查询中。之后,前台在进行轮询ajax请求接口,当标志为true的时候,就可以拿到结果

使用多线程实现异步IO存在那些缺陷

占用cpu资源过多。

linux五种IO模型

阻塞式IO:

阻塞式IO图解在这里插入图片描述

recvfrom方法读取数据,当数据没有到达linux内核空间的时候一直阻塞,等数据拿到了之后再复制一份发送给用户空间,程序才会继续执行

非阻塞式IO

非阻塞式IO图解
在这里插入图片描述
不管有没有拿到数据,都会立即返回的结果,如果结果有数据,就继续执行,如果没有数据,再次轮询请求数据。这样就不会导致阻塞,但是非常消耗CPU资源

阻塞式IO和非阻塞式IO,和悲观锁和乐观锁极其类似

复用IO(select,poll,expo)

之后会详细介绍,持续更新

信号驱动IO

事件驱动,回调的形式

AIO

异步非阻塞IO

BIO 阻塞式IO
实现步骤:

创建socket服务器端和客户端(只能支持一次请求)

添加while循环(可以支持多次请求,但是还是单线程执行)

添加线程池,采用多线程的方式去跑(这种方式即为伪异步)

伪异步的存在的问题:占用服务器内存太多,同时有一万个请求进来,及时存在线程池,超过最大线程数以后,也会等待

BIO演变NIO的过程

BIO为阻塞式IO
NIO为非阻塞式IO

BIO演变NIO的过程:首先使用while循环,能够接收多次请求。之后再使用线程池支持多个请求共同执行

阻塞式IO和非阻塞式IO的区别

阻塞式IO:recvfrom方法读取数据,当数据没有到达linux内核空间的时候一直阻塞,等数据拿到了之后再复制一份发送给用户空间,程序才会继续执行

非阻塞式IO:recvfrom方法读取数据,不管有没有拿到数据,都会立即返回结果,如果不能拿到数据,就会再次轮询请求内核获取数据。能拿到数据程序就继续向下执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值