I/O模型

本文探讨了传统I/O和NIO的特点与区别,详细解释了NIO如何通过非阻塞方式提高性能,解决了传统I/O因每个客户端使用单独线程而导致的资源消耗问题。

**

传统i/o特点

**
1、存在阻塞点
server.accept();
socket,getInputStream();
2、单线程只能有一个客户端,用线程池可以用多个客户端,但是非常消耗性能
3、面向流方式处理数据


NIO特点:


1、ServerSocketChannel ServerSocket
SocketChannel Socket
Selector
SelectionKey
2、面向块处理数据

Netty

基于NIO 的框架 一个封装很好扩展很好的nio框架,常用于RPC框架之间的传输层通信
SimpleChannelHandler //消息的读写
messageReceived //接受消息
channelConnected //新连接,通常用来检查ip是否是黑名单
channelDisconnected //关闭连接,清理用户缓存

因为阻塞I/O只能阻塞一个I/O操作,而I/O复用模型能够阻塞多个I/O操作,所以才叫做多路复用。
NIO 是一种同步非阻塞的 IO 模型
1.传统的IO基于⼦节(流)的,NIO是基于块的。它 以块为基本单位处理数据。
buffer(缓冲)是NIO的核⼼,是⼀块连续的内存 块,所有的IO 操作都要通过Buffer。 从channel读数据要通过Buffer,向channel写⼊数据 也要通过Buffer。 2.Channel就是IO的抽象,通道的另⼀边就是我们要 操作的对象。
传统IO有什么缺点,NIO是怎样解决这个问题的? (为什么NIO是⾮ 阻塞的???)
缺点:传统IO为每⼀个客户端使⽤⼀个线程,如果 客户端出现延迟等异常,线程可能会被占⽤很⻓的 时间,因为数据的准备和读取都在这个线程中。此 时,如果客户端数量众多,将会消耗⼤量的系统资 源。
----NIO会将数据准备好后,再交由应⽤进⾏处理, 数据的读取过程依然在应⽤线程中完成 ----节省数据准备时间(因为Selector可以复⽤)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值