Java之NIO原理

本来打算一周写一篇文章进行技术记录和分享的,但是最近有些忙估计有几个星期没有更了也不知道要写些什么好 🤣

今晚突发奇想想写一下IO模型方面的,所以就萌生了写这篇文章的想法。

如果有时间后面可能会用Java语言来实现NIO模型并且做一个简单的通信。

什么是NIO

 NIO是一个IO模型,比NIO更早的是BIO(意为阻塞同步IO)而NIO则是非阻塞同步IO

 NIO与BIO相比有哪些好处

BIO名副其实是一个阻塞同步IO,当链接进来时会为每一个链接创建一个线程来处理读写请求而当线程没有进行读写时该线程则阻塞无法处理其它事件。

NIO则是一个非阻塞同步IO,当链接进来时它不会专门为每个链接都创建一个线程来进行处理而是会创建一个Channel然后注册到Selector通过Selector来管理多个Channel。相比于BIO每个线程只能维护一个链接,NIO能维护更多的链接更节约系统资源。

NIO的组成部分

Seletor、Channel、Buffer

NIO模型示意图 

 

上图就是NIO的模型,服务端通过SocketServerChannel的Select能够感知变化,如果客户端第一次连接上来则会为该客户端创建一个SocketChannel并且注册到Selector,注册之后会返回SelectorKey它与Selector相互绑定,通过SelectorKey可以得到相对应的Channel亦能得到相应的Buffer。

延伸问题

Redis为什么是高性能的

 答曰:因为Redis的数据储存在内存里面

面试官:今天就到这里吧,先回去等通知! 

Redis高性能的原因除了操作是内存级别的操作还有重要的一点就是多路复用,也就是NIO 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值