传统的BIO(Blocking IO)的缺点
1、基于阻塞式IO建立起来的,导致服务端一直阻塞等待着客户端发起请求,如果客户端不发起,服务端的的业务线程会一直存。
2、弹性伸缩能力差,线程数和客户端数是1:1的关系,服务器压力大。
3、多线程非常耗资源。
NIO(Non-blocking IO)优点:
1、基于非阻塞IO构建的,服务端建立一个单线程的Selector来管理与所有客户端接入的Socket连接,并负责监听每个连接所关心的事件。
2、弹性伸缩能力加强了,服务端和客户端比例是1:M的关系。
3、单线程节省资源,节省了之前的BIO的多线程的花费的资源。
NOI核心:
1、channel 双向性;2、非阻塞性;3、操作唯一性(给予数据块的操作只能使用buffer);
2、Buffer的四核属性,capacity 容量,Position 位置,Limit上限,Mark 标记
3、Selector 选择器(多路复用器)
NIO编程实现步骤
1、创建Selector
2、创建ServerSocketChannel,并绑定监听端口
3、将channel设置为非阻塞模式
4、将channel注册到selector上,监听连接事件
5、循环调用selector的select方法,检测就绪情况
6、调用的selectedKeys方法获取就绪channel集合
7、判断事件就绪种类,调用相应的业务处理方法
8、根据业务需要决定是否有需要再次注册监听事件,重复执行第三步操作
原文:https://www.cnblogs.com/niuyg928/p/11181581.html