NIO相关知识点记录

NIO (non-blocking)同步非阻塞IO,一个线程处理多个连接

服务端只会创建一个线程负责管理selector(多路复用器),selector(多路复用器)会去注册在其上的Channel通道的IO事件,并将监听到的事件进行相关的处理。

工作流程:

创建selector:NIO的核心组件之一,可以监听多个通道上的IO事件,并通过select()方法等待事件发生

注册Channel:通过channel的register()方法将channel注册到selector上,这样selector就可以监听channel上的IO事件

等待事件:调用select方法等待事件发生,当有事件发生时selector会通知相关的线程去处理

处理事件:根据不同的事件类型进行处理

关闭Channel:当channel不再使用时,需要调用close方法,同时需要调用buffer中clear方法,清空buffer中的数据,以释放内存资源。

NIO同步非阻塞,一个线程处理多个连接

 传统的BIO,同步阻塞

 区别:

阻塞和非阻塞:阻塞的模式同一时间只能处理一个请求;非阻塞的可以同时处理多个请求。

线程模型:NIO是基于事件驱动的,当一个IO操作完成之后,会通知相应的事件通知线程处理

                BIO每个线程处理一个客户端的连接,不断轮询客户端中的输入输出流,以便及时响

                应客户端的请求

内存消耗:NIO中使用的缓冲区是可以重复利用的,减少内存的分配和回收

                        BIO会为每个客户端分配缓冲区,容易造成内存资源的浪费

并发性能:非阻塞的模式,可以同时处理多个客户端的请求,提高并发处理的能力。

                        阻塞式的,每处理一个客户端的请求就会创建一个连接,当连接数过多的时候,

                        就容易出现线程饥饿和资源耗尽的情况。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值