**
传统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可以复⽤)