IO-BIO概述

介绍

​ BIO就是: blocking IO,同步阻塞IO。应用程序向操作系统请求网络IO操作,这时应用程序会一直等待;另一方面,操作系统收到请求后,也会等待,直到网络上有数据传到监听端口;操作系统在收集数据后,会把数据发送给应用程序;最后应用程序受到数据,并解除等待状态。

  • 阻塞IO非阻塞IO

​ 主要描述的是程序请求操作系统IO操作后,如果IO资源没有准备好,那么程序该如何处理的问题: 前者等待后者继续执行(并且使用线程一直轮询,直到有IO资源准备好了)

  • 同步IO非同步IO

​ 主要描述的是操作系统在收到程序请求IO操作后,如果IO资源没有准备好,该如何响应程序的问题: 前者不响应,直到IO资源准备好以后;后者返回一个标记(好让程序和自己知道以后的数据往哪里通知),当IO资源准备好以后,再用事件机制返回给程序。

传统BIO问题

​ 同一时间,服务器只能处理一个客户端的请求处理,除非采用多线程方式。完全不能抗住高并发。

多线程-伪异步

但是使用线程来解决这个问题实际上是有局限性的:

1)虽然在服务器端,但是请求的处理交给了一个独立线程进行,虽说数据处理可以多线程处理,但是请求毕竟是需要一个一个来。

2)**在linux系统中,可以创建的线程是有限的。**以通过cat /proc/sys/kernel/threads-max 命令查看可以创建的最大线程数。但是线程越多,CPU切换所需的时间也就越长,用来处理真正业务的需求也就越少。

3)创建一个线程是有较大的资源消耗的。JVM创建一个线程的时候,即使这个线程不做任何的工作,JVM都会分配一个堆栈空间。这个空间的大小默认为128K,您可以通过-Xss参数进行调整。当然您还可以使用ThreadPoolExecutor线程池来缓解线程的创建问题,但是又会造成BlockingQueue积压任务的持续增加,同样消耗了大量资源。

4)如果大量使用长连接的话,线程是不会关闭的,这样系统资源的消耗更容易失控

而异步IO模式 就是为了解决这样的并发性存在的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值