BIO & NIO & AIO

同步阻塞 and 同步非阻塞 and 异步非阻塞

什么是BIO ???

BIO:同步阻塞,服务器实现一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,没处理完之前此线程不能做其他操作。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高。

举个栗子:

同步阻塞:小明从网上要下载一个文件,于是来到书房打开电脑开始下载,而且得必须坐在电脑桌前一直等到文件下载完毕。

BIO网络模型

假设左边是客户端,右边是服务器端;

第一步,服务端启动,开始监听客户端的连接请求;

第二步,客户端启动,启动后向服务端发起建立连接请求;

第三步,服务端接收到客户端发起的连接请求,会创建一个新的线程;

第四步,这个新创建的线程会和客户端建立 socket 连接,然后响应客户端的连接成功信息;

第五步,服务端这个线程会一直等待客户端的再次请求。

假设客户端在建立完连接请求后一直没有再发送信息,那么服务器端的线程会一直一直等待,让我们试想一下,如果上千万的客户端都这样,建立完连接之后不发数据,那么........

服务器端就承受不住了 !!!

什么是NIO ???

NIO:  同步非阻塞,服务器实现一个连接一个线程,即客户端发送的连接请求都会注册到多路复用 器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连接数目多 且连接比较短(轻操作)的架构,比如聊天服务器。

举个栗子:

同步非阻塞:小明从网上要下载一个文件,于是来到书房打开电脑开始下载,但不需要坐在电脑桌前一直等待,而是可以到客厅看电视,每隔一分钟左右来书房看一下是否下载完毕即可。

NIO网络模型

假设左边是客户端,右边是服务器端;

第一步,Selector 里注册一个建立连接的事件;

第二步,当客户端启动,启动后向服务端发起建立连接请求;

第三步,Selector 会检测到客户端发起的连接请求,然后启动一个建立连接的事件处理器;

第四步,Acceptor 创建于客户端连接,即响应客户端的建立连接请求;

第五步,Acceptor 把新创建的 socket 连接注册到 Selector 上,并且注册这个连接的可读事件;

第六步,客户端发送请求,还是发送到 Selector 上;

第七步,Selector 启动连接读写处理器;

第八步,Read & Write 处理与客户端的读写业务;

第九步,由 Read & Write 响应客户端请求;

第十步,Read & Write 再次将 Socket 可读事件注册到 Selector 上。

什么是AIO ???

AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由操作系统 先完成了再通知服务器应用去启动线程进行处理,AIO方式使用于连接数目多且连接比较长(重操 作)的架构,比如相册服务器,充分调用操作系统参与并发操作,编程比较复杂,JDK1.7之后开 始支持。

AIO属于NIO包中的类实现,其实IO主要分为BIO和NIO,AIO只是附加品,解决IO不能异步的实现。

在以前很少有Linux系统支持AIO,Windows 的IOCP就是该AIO模型。但是现在的服务器一般都是 支持AIO操作。

举个栗子:

异步非阻塞​​​​​​​:小明从网上要下载一个文件,于是来到书房打开电脑开始下载,不需要坐在电脑桌前一直等待,小明可以安心去客厅看电视,中途也无需返回查看下载情况,电脑文件下载完毕后会有提示音通知小明下载完毕。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值