BIO、NIO、NIO(多路复用)、AIO 机制详解和发展历程

前言:本文用到的铺垫知识:TCP/IP、操作系统 用户态/内核态的切换、linux 系统 文件描述符概念(应还有点socket编程经验,起码手写过TCP/IP连接的服务端),系统的中断

发展目的:让CPU的运行时间多花在用户空间的应用程序上,而不是内核态的进程,线程管理上

1.首先谈下客户端和服务端是怎么建立TCP连接的

1)服务端启动

  • 首先服务端创建socket套接字
  • 绑定监听端口
  • 通过一个死循环来调用Accept不断监听客户端信息
  • 如果有客户端连接则抛出一个新的线程去处理这个连接

一、BIO (blocking I/O)阻塞型IO

  1. 首先看下阻塞型IO,如果,我们的服务端接受到客户端请求并建立连接,客户端再发送消息是需要时间的,在这个时间段内此时我们的服务端线程会调用内核read()方法,此时此线程会处于阻塞状态,就是一直等待着客户端发送消息。
  2. 这样的话,每一个客户端连接都会抛出一个线程(线程是要消耗内存资源的,默认的JVM配置中,每一个线程默认大小是1MB),并且网络IO的效率远低于CPU处理效率,这样CPU不断地轮询线程,不断地保存并恢复现场,耗费了大量时间在线程切换上面。弊
  3. 此场景弊端是线程抛出的太多了,每一个客户端连接都需要抛出一个线程。要解决这个问题,那么为什么要抛出线程呢?
  4. 是因为IO阻塞,所以才每一个连接都抛出一个线程,为了解决这个问题,NIO(Non-Blocking IO)应运而生

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值