异步非阻塞IO框架Netty

NIO(同步非阻塞IO):服务端创建ServerSocketChannel监听端口,绑定Selector并监听连接事件(Selector监听ServerSocketChannel感兴趣的事件)。客户端发起连接请求Selector就会感知到,创建新的SocketChannel(accept方法)注册Selector监听感兴趣的事件。
Selector(多路复用器):底层使用linux的epoll实现,每当有IO事件就绪,系统注册的回调函数就会被调用,会延迟100毫秒,延迟期间可能会有其他请求过来,一并处理。

阻塞:调用accept和read方法时要等待客户端连接,没有连接会阻塞等待。
同步:调用accept和read方法要等待方法执行完才继续执行代码。

Netty:抽象出两组线程池BossGroup和WorkerGroup,BossGroup负责处理连接请求,WorkerGroup负责处理读写请求
BossGroup和WorkerGroup相当于线程池,维护多个NioEventLoop线程,每个NioEventLoop线程有一个Selector,Selector监听注册的SocketChannel感兴趣的事件。每个Channel创建都有一个ChannelPipline双向链表存放ChannelHandler,ChannelHandler绑定出站和入站事件,出站和入站事件会经相应的ChannelHandler处理。
在这里插入图片描述

Netty零拷贝:避免在用户态和内核态来回拷贝的技术
传统IO:CPU拷贝数据到内核空间Buffer,再从内核空间复制到用户空间,用户空间拷贝到内核空间的socket buffer,最后拷贝到网卡缓冲
在这里插入图片描述

Netty使用直接内存,避免了用户空间buff的拷贝。
linux系统权限级别,用户态最低级别(应用程序),应用程序要访问硬盘网卡等要切换到内核态去执行。
1.系统切换到内核态读取数据到内核空间缓冲区buff
2.socket buff记录只拷贝内核空间地址,可以直接拷贝到网卡缓冲
在这里插入图片描述
netty对NIO的API进行了良好的封装,解决了心跳处理,网络拥塞,半包读写等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值