Netty 源码剖析与实战
傅健
Netty 源码贡献者、Cisco 高级软件工程师
32935 人已学习
新⼈⾸单¥59
课程目录
已完结/共 60 讲
第一章:初识Netty:背景、现状与趋势 (7讲)
第三章:Netty源码:从“线”(请求处理)的角度剖析 (8讲)
第六章:成长为Netty的贡献者 (6讲)
Netty 源码剖析与实战
登录|注册
留言
48
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 11 | 源码剖析:Netty对Reactor的支持
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 揭开Netty面纱
04 | 为什么舍近求远:不直接用JDK NIO?
05 | 为什么孤注一掷:独选Netty?
06 | Netty的前尘往事
07 | Netty的现状与趋势
08 | Netty怎么切换三种I/O模式?
09 | 源码剖析:Netty对I/O模式的支持
10 | Netty如何支持三种Reactor?
11 | 源码剖析:Netty对Reactor的支持
12 | TCP粘包/半包Netty全搞定
13 | 源码剖析:Netty对处理粘包/半包的支持
14 | 常用的“二次”编解码方式
15 | 源码剖析:Netty对常用编解码的支持
16 | keepalive与idle监测
17 | 源码剖析:Netty对keepalive与idle监测的支持
18 | Netty的那些“锁”事
19 | Netty如何玩转内存使用
20 | 源码解析:Netty对堆外内存和内存池的支持
21 | Netty代码编译与总览
22 | 源码剖析:启动服务
23 | 源码剖析:构建连接
24 | 源码剖析:接收数据
25 | 源码剖析:业务处理
26 | 源码剖析:发送数据
27 | 源码剖析:断开连接
28 | 源码剖析:关闭服务
29 | 编写网络应用程序的基本步骤
30 | 案例介绍和数据结构设计
31 | 实现服务器端编解码
32 | 实现一个服务器端
33 | 实现客户端编解码
34 | 完成一个客户端雏形
35 | 引入"响应分发"完善客户端
36 | Netty编码中易错点解析
37 | 调优参数:调整System参数夯实基础
38 | 调优参数:权衡Netty核心参数
39 | 调优参数:图解费脑的三个参数
40 | 跟踪诊断:如何让应用易诊断?
41 | 跟踪诊断:应用能可视,心里才有底
42 | 跟踪诊断:让应用内存不“泄露”?
43 | 优化使用:用好自带注解省点心
44 | 优化使用:“整改”线程模型让"响应"健步如飞
45 | 优化使用:增强写,延迟与吞吐量的抉择
46 | 优化使用:如何让应用丝般“平滑”?
47 | 优化使用:为不同平台开启native
48 | 安全增强:设置“高低水位线”等保护好自己
49 | 安全增强:启用空闲监测
50 | 安全增强:简单有效的黑白名单
51 | 安全增强:少不了的自定义授权
52 | 安全增强:拿来即用的SSL-对话呈现表象
53 | 安全增强:拿来即用的SSL-抓包暴露本质
54 | 安全增强:拿来即用的SSL-轻松融入案例
55 | Cassandra如何使用Netty ?
56 | Dubbo如何使用Netty ?
57 | Hadoop如何使用Netty ?
58 | 赏析Netty之美
59 | 如何给Netty贡献代码?
60 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(48)

  • 最新
  • 精选
ELLIOT
老师,既然mainReactor只会绑定一次,那是否bossGroup无论设置多少个线程其实只会有一个在工作?

作者回复: 一般常用场景都可以这么认为,所以有的开源组件直接上来就把它显示指定成1个线程。

2019-10-11
10
pjmike
老师您好,我想请教一个问题,我之前学过一点Reactor模式,而且网上很多写Reactor模式的文章都表达类似的思想,Reactor分为三种模式: - 单线程模式:一个NIO线程处理连接和读写操作 - 多线程模式:一个NIO线程专门处理连接,一个NIO线程池用于处理IO读写操作 - 主从多线程模式:一个NIO线程池用于处理连接,一个NIO线程池用于IO读写操作 我其实是想问,为什么Netty会支持主从多线程模式呢,我们一般定义bossGroup和workGroup,但是Netty只会从bossGroup线程池中选取一个NioEventLoop与Channel进行绑定,也就是说随机分配一个线程用于处理客户端连接,实际上并没有用到线程池,这样说来,Netty应该没有对应的Reactor主从多线程模式的实现,只有多线程模式和单线程模式对应的实现。 所以有点疑惑,不知道是不是我对Reactor模式的理解错了?希望老师能够解答一下

作者回复: 主从按selector是否分开来区分(而不是用是否共用一个线程来划分)比较容易理解点:主,接受连接,从,处理连接上的事,主一般现在只绑定一个端口所以是单线程,但是从是多线程,所以还是叫主从多线程对不对?你仔细看你提出的划分,第二种和第三种除了线程数不同外,并没有体现主从思想对不对?网上也有像你这么划分的,但是我觉得不太合适,你最好参考ppt上的图区去理解,那个是经典划分,然后具体实现上,netty有一点细小差别,但是大体一样。

2019-10-18
4
7
每天晒白牙
老师的讲课风格是我喜欢的,自己之前也一直想研究netty源码,但是一直找不到好方法,也就没干下去,正好跟着老师一起学,期待后续课程的更新

作者回复: 谢谢肯定,一起学习

2019-10-13
7
夏目
老师,我有个疑问。main reactor只能用到一个线程的话是不是代表bossGroup只有一个在工作,那么这样和多线程reactor不就一样了吗?

作者回复: bind几个端口启动,就用到几个,所以一般确实只能用到1个。主从reactor, 也是reactor,也是多线程(因为worker线程肯定有,所以至少2个),但是区别在于,主从reactor是有分工的多线程,非主从的,线程没有角色分工,都是所有的事情都做。

2019-12-26
6
李博
老师这个课程,通俗易懂,优秀!

作者回复: 谢谢肯定,当时设计怎么讲的时候想过照本宣科,显得严谨,但是后来想下,大家能有兴趣么?能记得住么?所以是个挑战,所以决定:算了,多做类比,就算不严谨,至少容易理解点

2019-10-12
6
jzdayz
&2的幂次方,主要是为了公平性与性能,性能就是直接操作位,公平如下: 假设线程池大小是7 那么第一次调用: 0 & (7-1) 0000 0000 0000 0110 返回 executor[0] 第二次调用: 1 & (7-1) 0000 0001 0000 0110 返回 executor[0] 第三次: executor[2] 第四次: executor[2] 第五次: executor[4] 第六次: executor[4] ......... 很明显有问题,只有在&上二进制表示都为1的情况下,也就是2的幂次方-1,才会公平,但是为什么不直接& length,假设length为2的幂次方-1,因为下标越界了额😄,比如长度为7,第8次调用,那就是 0000 0111 0000 0111 结果就是7,但是线程池总数为7 ,executor[7]就会越界

作者回复: 正解!

2019-10-31
4
4
td901105
老师您好,能解释一下NioEventLoop的含义吗?不是很明白,是不是发生的事件?

作者回复: 你发过来看,就懂了,loop nio event,它的功能是轮训事件的,然后处理事件.别人也注册事件,而核心是因为它有一个selector

2019-10-17
2
3
xiaorui
那短链接是不是性能会差?因为bossg group只有一个线程,或者这个线程挂了链接处理会短暂有问题

作者回复: 肯定差,明明已经握手,交谈,现在变成,交谈一次握次手,所以很累很心烦,但是实践上,一般有时候为了各种情况应对,会搞成一定时间的长连接,总之,一般都不用纯短连接了。boss线程挂了就玩完了,所以肯定不会让它挂的,挂了肯定连接连不上

2019-10-16
3
3
HaydnSyx
感觉这种阅读源码方式好难串起来,好难理解

作者回复: 嗯,可能原因在于第一,本来就有点复杂,第二,讲的时候不是按照一个请求处理那种顺序,所以第三章我换了一个方式,可以到时候把那个先看了,再回头看这个也可以,我当时考虑的是,如果学源码,应该先有领域知识,所以放前面了,单纯从源码学习,请求处理的话先学或许对不一样学习习惯的人容易理解点

2019-10-13
3
拒绝
给Channel 分配NIOEventLoop,有其它Channel在使用,会出现什么情况?

作者回复: 没关系,nio event loop里面就一个线程在用,可以理解就是单线程的,本来设计就是一个event loop 给多个channel用,否则一个人一个,那最终不就爆炸了么,和传统的那个一个连接一个线程就一样了,那个loop单词很形象,单线程,死循环。处理绑定上它上面的多个channel的事件

2019-10-15
2
收起评论