BIO、NIO、AIO--基础

一.BIO:

BIO是最传统的网络通信模型,同步阻塞式IO
通信结构图:
在这里插入图片描述

  • 通信流程简述:
    服务端创建一个ServerSocket,然后客户端用一个Socket去连接那个ServerSocket,然后ServerSocket接收到一个Socket的连接请求就创建一个Socket和一个线程去跟那个Socket进行通信,然后客户端和服务端的socket,就进行同步阻塞式的通信,客户端socket发送一个请求,服务端socket进行处理后返回响应,响应必须是等处理完后才会返回,在这之前啥事儿也干不了,这可不就是同步么。
  • 缺点:
    每次一个客户端接入,都是要在服务端创建一个线程来服务这个客户端的,这会导致大量的客户端的时候,服务端的线程数量可能达到几千甚至几万,几十万,这会导致服务器端程序的负载过高,最后崩溃死掉。

二.NIO:

NIO同步非阻塞
通信结构图:
在这里插入图片描述

  • 通信流程简述:
  1. 客户端(client)发送请求到服务端(Selector),sercer创建channel和客户端建立起连接,

    • NIO中都是通过Channel来进行数据读写的。
    • Selector是多路复用器,selector会不断轮询注册的channel,如果某个channel上发生了读写事件,selector就会将这些channel获取出来,我们通过SelectionKey获取有读写事件的channel,就可以进行IO操作。一个Selector就通过一个线程,就可以轮询成千上万的channel,这就意味着你的服务端可以接入成千上万的客户端。
    • 这里的核心就是非阻塞,就那个selector一个线程就可以不停轮询channel,所有客户端请求都不会阻塞,直接就会进来,大不了就是等待一下排着队而已。
  2. 客户端发送数据selector会立马创建一个工作线程,完成工作工作线程消除

  • 所以为啥是非阻塞呢?
    因为无论多少客户端都可以接入服务端,客户端接入并不会耗费一个线程,只会创建一个连接然后注册到selector上去罢了,一个selector线程不断的轮询所有的socket连接,发现有事件了就通知你,然后你就启动一个线程处理一个请求即可,但是这个处理的过程中,你还是要先读取数据,处理,再返回的,这是个同步的过程。

  • 工作线程,从channel里读数据,是同步的,是工作线程自己去干这个事儿,卡在那儿,专门干读数据的这个活儿,数据没读完,你就卡死在这儿了;然后往channel里写数据,也是你自己去干这个事儿,卡死在这儿了,数据没写完,你就卡在这儿了。

三.AIO

AIO异步非阻塞

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值