网络IO的实现方式

网络IO的实现方式

当我们使用Socket套接字进行网络通信时,会使用如下三种方式:BIO、NIO和AIO,接下来我就分别详细介绍下这三种方式的区别。

1. BIO

BIO是Blocking IO的简写,一个套接字需要使用一个线程处理,它的过程就是建立连接、读数据、写数据,然而在这些过程中都有可能会发生阻塞。这就是为什么我们首先会接触到这种方式的原因,因为它简单,一个线程只处理一个Socket,但如果是Server端,在并发连接时就需要更多的线程才能完成工作。

工作方式如下所示:

这里写图片描述

2. NIO

NIO是Nonblocking IO的缩写,是基于事件驱动的思想,采用了Reactor模式。这也是Java在服务端系统中经常采用的一种方式,相对于BIO,NIO一个明显的优势就是不需要为每一个Socket套接字分配一个线程,而是在一个线程中可以处理多个Socket套接字相关的工作。感兴趣的可以去了解一下Reactor模式,在这里给一个链接 -> 详解Reactor

Reactor模式的运用:

这里写图片描述

3. AIO

AIO就是Asynchronous IO,即异步IO。AIO采用的是Proactor模式(如下图),AIO和NIO的不同在于,AIO在读写的时候,只需要调用相应的read/write方法,并需要传入CompletionHandler(动作完成的处理器);动作完成后,会调用CompletionHandler。NIO的通知是发生在动作之前,是在可写、可读的时候,Selector发现这些事件后调用Handler处理的。

Proactor模式:

这里写图片描述
AIO是在Java7中引入的。其实在目前服务端中都是基于NIO的,AIO和NIO最大的一个不同点在于,NIO在有通知时可以进行相关操作,读或写都可以,而AIO在有通知时表示相关操作已经完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值