对NIO和netty的理解和使用

对NIO的理解和使用

1、BIO 是一种阻塞IO,监听阻塞(active),read阻塞。程序不往下执行
可进行多线程解决,但问题会出现空转,性能消耗问题

2、NIO 非阻塞IO,这个java中的实现和redis中的底层实现基本一致,liunx上主要采用了epoll模型,调用了 create ctl wait 系统指令 注册表到执行表中借助于liunx操作系统中中断程序完成

selector 字面意思之所以与select类似,因为早期版本1.4之前,java中NIO底层native调用的C代码中调用的liunx系统指令是select,后来改用了poll模型,到现在的epoll模型
select指令采用数组遍历,存在上线。后改进使用poll这种链表遍历,不存在上线。遍历比较耗性能,后改用epoll模型,存储采用hash表,操作上用了回调函数,事件响应式,一旦有数据或是链接就会触发回调函数

3、netty对传统的NIO实现进行了优化 采用多个reactor响应模型,这里的reactor是被包装了的selector,底层当前依然使用epoll模型实现。可以分为boss节点和worker节点,这两个阶段是两个线程池,每个线程实现一个selector
一般boss节点取得链接,work节点进行消息的读取,编码,执行,反编码和输出操作,在netty中worker节点时多线程的执行存在。

4、netty接收和发送数据,采用了零拷贝机制,源码中的byteBuf中内容存在直接内存中,直接内存,就是从网卡socket缓存队列,复制到内核态的物理内存,我们的用户内存,jvm的堆中存着对直接内存的引用,jvm的栈的栈针中存着对应的变量
也就是说,栈帧中存着变量的引用,引用了堆里的对直接内存中消息内容的引用,堆里的引用引用了内核态中的物理消息内存

5、netty的应用,在dubbo中默认的dubbo协议,就是采用netty实现通信,简单的聊天类窗口可以使用netty实现

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plenilune-望月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值