netty学习--知识点整理-阿里云开发者社区

开发者社区> 积淀> 正文

netty学习--知识点整理

简介: Netty中概念的理解 1)Channel:相当于一个Socket连接,类比java nio的SocketChannel;2)EventLoop:反应堆线程,通过非阻塞方式执行I/O任务、定时任务等,类比java nio的Selector;I/O任务和定时任务都被抽象为事件,通过eventloop.
+关注继续查看

Netty中概念的理解

1)Channel:相当于一个Socket连接,类比java nio的SocketChannel;
2)EventLoop:反应堆线程,通过非阻塞方式执行I/O任务、定时任务等,类比java nio的Selector;I/O任务和定时任务都被抽象为事件,通过eventloop线程执行;
3)EventLoopGroup:反应堆线程组成的线程池,用于提升反应堆的处理能力及可用性;
4)ChannelFuture:采用Promise模式,异步通知I/O结果;
5)ChannelPipeline:一个channel中,用于处理事件的职责链,即一条完整的数据处理流程,包括输入、输出;
6)ChannelHandler:一条ChannelPipeline中的一个环节,可以只针对特定事件进行处理,或者仅对事件进行部分处理,如数据的编解码,以便于后续环节的处理;
7)ChannelInitializer:用于初始化一个Channel;
8)Bootstrap:用于引导和简化一个Channel的初始化过程;
9)ChannelGroup:用于对一组Channel进行分类和统一管理;

Netty中实体的关系

1)一个EventLoopGroup中包含一个或者多个EventLoop;
2)一个EventLoop在其生命周期内只和一个Thread绑定,且分配给该EventLoop的所有事件都在其绑定的Thread上处理;
3)一个Channel在其生命周期内只注册于一个EventLoop;
4)一个EventLoop可以用于处理一个或者多个Channel的事件;
5)一个EventLoopGroup可以被多个Channel所共享,通过Bootstrap单独为每一个Channel新建EventLoopGroup没有必要;

ChannelHandler的常用实现类

ByteBuf的实现方式

1)堆缓冲区:底层使用byte数组,数据直接缓冲在堆内存中;
优点:内存分配和释放效率高;
缺点:发送数据时,需要先从堆内存中拷贝数据到直接内存缓冲中;
2)直接缓冲区:使用直接内存块存放数据;
优点:发送数据时,零拷贝;
缺点:内存分配和释放比堆内存慢;
3)复合缓冲区:多个ByteBuf的组合,其中的ByteBuf即可以是堆缓冲区实现,又可以是直接缓冲区实现;

为什么服务端需要2个EventLoopGroup?

因为服务端需要启动本地端口,用于监听远程连接;同时,服务端还要和特定的远程连接进行通信。因而,第一个group用来监听本地端口的连接,仅包含一个ServerChannel。第二个group用来和已经建立连接的channel进行通信。

Channel和ChannelHandlerContext中write的区别:

Channel的write方法,会让时间从ChannelPipeline中的第一个ChannelHandler开始处理,使得数据完整的经过ChannelPipeline中的每一个环节;
ChannelHandlerContext的write方法:仅会从下一个ChannelHander开始处理,只会经过剩下的环节,并不会完整经过ChannelPipeline中的每一个环节;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
这个知识点不错,,学习一下先。。。无状态服务(stateless service)(转)
这样的应用,显得高级一些哟~~:) +================== http://kyfxbl.iteye.com/blog/1831869 ========================== 一、定义 无状态服务(stateless service)对单次请求的处理,不依赖其他请...
764 0
Android开发学习知识点清单
<h1>1、Android<span style="font-family:宋体">中的基本控件(上)</span> </h1> <div><span style="font-family:宋体"><a target="_blank" href="http://blog.csdn.net/waldmer/article/details/23127919">按钮控件Button</a></
1111 0
从Netty到EPollSelectorImpl学习Java NIO
终于可以在写了几篇鸡汤文后,来篇技术文章了,:),题图是Trustin Lee,Mina/Netty都是他搞的,对Java程序员尤其是写通讯类的都产生了巨大影响,向他致敬! 在上周查一个内存OOM的问题之前,我一直觉得自己对Java NIO应该还是比较懂的,君不见N年前我曾经写过一篇《NFS-RP
4575 0
matplotlib绘图可视化知识点整理(一)
参考网址: http://blog.csdn.net/panda1234lee/article/details/52311593 http://liam0205.
1154 0
Spring.Net Aop 学习
浅析Spring.net 中的Aop使用 Spring.NET 中的 AOP .NET中AOP的几种实现方案 Spring.NET学习笔记12——面向切面编程(基础篇) Level 300
480 0
+关注
24
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载