没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Netty 案例集锦之并发编程 微信公众号:Netty 之家
第
1
页 共
77
页
1
1. Netty 案例集锦系列文章介绍.....................................................................................................4
1.1. Netty 的特点........................................................................................................................4
1.2. 案例来源.............................................................................................................................4
1.3. 并发编程篇.........................................................................................................................4
2. Netty 线程模型............................................................................................................................. 5
2.1. Java 线程模型的演进..........................................................................................................5
2.1.1. 单线程......................................................................................................................5
2.1.2. 多线程......................................................................................................................5
2.1.3. 线程池......................................................................................................................5
2.2. Reactor 模型........................................................................................................................ 6
2.2.1. 单线程模型..............................................................................................................6
2.2.2. 多线程模型..............................................................................................................7
2.2.3. 主从多线程模型......................................................................................................8
2.3. Netty 线程模型分类............................................................................................................9
2.3.1. 服务端线程模型......................................................................................................9
2.3.2. 客户端线程模型....................................................................................................12
2.4. Reactor 线程 NioEventLoop............................................................................................. 16
2.4.1. NioEventLoop 介绍................................................................................................16
2.5. NioEventLoop 设计原理...................................................................................................18
2.5.1. 串行化设计避免线程竞争....................................................................................18
2.5.2. 定时任务与时间轮算法........................................................................................19
2.5.3. 聚焦而不是膨胀....................................................................................................23
3. Netty 3 版本升级遭遇内存泄漏案例.......................................................................................24
3.1. 问题描述...........................................................................................................................24
3.2. 问题定位...........................................................................................................................25
3.3. 问题根因...........................................................................................................................26
3.4. 案例总结...........................................................................................................................27
4. Netty 3 版本升级性能下降案例...............................................................................................28
4.1. 问题描述...........................................................................................................................28
4.2. 问题定位...........................................................................................................................29
4.3. 问题总结...........................................................................................................................30
5. Netty 业务 Handler 接收不到消息案例....................................................................................31
5.1. 问题描述...........................................................................................................................31
5.2. 问题定位...........................................................................................................................31
5.3. 问题总结...........................................................................................................................34
6. Netty 4 ChannelHandler 线程安全疑问.................................................................................... 35
6.1. 问题咨询...........................................................................................................................36
6.2. 解答...................................................................................................................................36
6.3. 一些特例...........................................................................................................................36
7. Netty 构建推送服务问题...........................................................................................................37
7.1. 问题描述...........................................................................................................................38
7.2. 答疑解惑...........................................................................................................................38
7.3. 问题总结...........................................................................................................................39
8. Netty 客户端连接问题...............................................................................................................40
javaQQqun425783133
Netty 案例集锦之并发编程 微信公众号:Netty 之家
第
2
页 共
77
页
2
8.1. 问题描述...........................................................................................................................40
8.2. 答疑解惑...........................................................................................................................40
8.3. 问题总结...........................................................................................................................41
9. 性能数据统计不准确案例.........................................................................................................42
9.1. 问题描述...........................................................................................................................42
9.2. 问题分析...........................................................................................................................42
9.3. 问题总结...........................................................................................................................44
9.4. 举一反三...........................................................................................................................45
10. Netty 线程数膨胀案例.............................................................................................................46
10.1. 问题描述.........................................................................................................................46
10.2. 问题分析.........................................................................................................................46
10.3. 案例总结.........................................................................................................................49
11. Netty 3.X 版本升级线程上下文丢失案例..............................................................................49
11.1. 问题描述......................................................................................................................... 49
11.2. 问题分析......................................................................................................................... 50
11.3. 问题总结......................................................................................................................... 52
12. 智能家居服务端遭遇内存泄漏...............................................................................................52
12.1. 问题描述.........................................................................................................................52
12.2. 问题定位.........................................................................................................................53
12.3. 问题总结.........................................................................................................................54
13. Netty 3.X 多线程并发导致的异常..........................................................................................54
13.1. 问题描述.........................................................................................................................54
13.2. 问题分析.........................................................................................................................55
13.3. 案例总结.........................................................................................................................55
14. Netty OOM 案例.......................................................................................................................56
14.1. 问题描述.........................................................................................................................56
14.2. 问题分析.........................................................................................................................56
14.3. 问题总结.........................................................................................................................60
15. Netty 线上问题排查................................................................................................................60
15.1. 背景说明.........................................................................................................................60
15.2. 问题描述.........................................................................................................................61
15.3. 问题分析.........................................................................................................................61
15.4. 问题总结.........................................................................................................................62
16. Netty 线程开发最佳实践.........................................................................................................62
16.1. 时间可控的简单业务直接在 I/O 线程上处理.............................................................62
16.2. 复杂和时间不可控业务建议投递到后端业务线程池统一处理................................62
16.3. 业务线程避免直接操作 ChannelHandler..................................................................... 62
17. 附录........................................................................................................................................... 63
17.1. 并发编程在 Netty 中的应用..........................................................................................63
17.1.1. 对共享的可变数据进行正确的同步................................................................. 63
17.1.2. 正确的使用锁......................................................................................................64
17.1.3. volatile 的正确使用..............................................................................................66
17.1.4. CAS 指令和原子类..............................................................................................69
17.1.5. 线程安全类的应用..............................................................................................71
javaQQqun425783133
Netty 案例集锦之并发编程 微信公众号:Netty 之家
第
3
页 共
77
页
3
17.1.6. 读写锁的应用......................................................................................................74
17.1.7. 线程安全性的文档说明......................................................................................76
17.2. 作者简介.........................................................................................................................77
javaQQqun425783133
Netty 案例集锦之并发编程 微信公众号:Netty 之家
第
4
页 共
77
页
4
1. Netty 案例集锦系列文章介绍
1.1. Netty
的特点
Netty 入门比较简单,主要原因有如下几点:
1. Netty 的 API 封装比较简单,将复杂的网络通信通过 BootStrap 等工具类做
了二次封装,用户使用起来比较简单;
2. Netty 源码自带的 Demo 比较多,通过 Demo 可以很快入门;
3. Netty 社区资料、相关学习书籍也比较多,学习资料比较丰富。
但是很多入门之后的 Netty 学习者遇到了很多困惑,例如不知道在实际项
目中如何使用 Netty、遇到 Netty 问题之后无从定位等,这些问题严重制约了对
Netty 的深入掌握和实际项目应用。
Netty 相关问题比较难定位的主要原因如下:
1) NIO 编程自身的复杂性,涉及到大量 NIO 类库、Netty 自身封装的类库等,
当你需要打开黑盒定位问题时,必须对这些类库了如指掌;否则即便定位到
问题所在,也不知所以然,更无法修复;
2) Netty 复杂的多线程模型,用户在实际使用 Netty 时,会涉及到 Netty 自己
封装的线程组、线程池、NIO 线程,以及业务线程,通信链路的创建、I/O
消息的读写会涉及到复杂的线程切换,这会让初学者云山雾绕,调试起来非
常痛苦,甚至都不知道从哪里调试;
3) Netty 版本的跨度大,从实际商用情况看,涉及到了 Netty 3.X、4.X 和 5.X
等多个版本,每个 Major 版本之间特性变化非常大,即便是 Minor 版本都存
在一些差异,这些功能特性和类库差异会给使用者带来很多问题,版本升级
之后稍有不慎就会掉入陷阱。
1.2. 案例来源
Netty 案例集锦的案例来源于作者在实际项目中遇到的问题总结、以及
Netty 社区网友的反馈,大多数案例都来源于实际项目,也有少部分是读者在学
习 Netty 中遭遇的比较典型的问题。
1.3.
并发编程篇
学习和掌握 Netty 并发编程模型是个难点,在实际项目中如何使用好 Netty
javaQQqun425783133
Netty 案例集锦之并发编程 微信公众号:Netty 之家
第
5
页 共
77
页
5
多线程更加困难,很多网上问题和事故都来源于对 Netty 线程模型了解不透彻所
致。鉴于此,Netty 案例集锦系列就首先从并发编程开始。
2. Netty 线程模型
2.1. Java 线程模型的演进
2.1.1. 单线程
时间回到 10 几年前,那时主流的 CPU 都还是单核(除了商用高性能的小机),
CPU 的核心频率是机器最重要的指标之一。
在 Java 领域当时比较流行的是单线程编程,对于 CPU 密集型的应用程序而
言,频繁的通过多线程进行协作和抢占时间片反而会降低性能。
2.1.2. 多线程
随着硬件性能的提升,CPU 的核数越来越越多,很多服务器标配已经达到 32
或 64 核。通过多线程并发编程,可以充分利用多核 CPU 的处理能力,提升系统
的处理效率和并发性能。
从 2005 年开始,随着多核处理器的逐步普及,java 的多线程并发编程也逐
渐流行起来,当时商用主流的 JDK 版本是 1.4,用户可以通过 new Thread()
的方式创建新的线程。
由于 JDK1.4 并没有提供类似线程池这样的线程管理容器,多线程之间的同
步、协作、创建和销毁等工作都需要用户自己实现。由于创建和销毁线程是个相
对比较重量级的操作,因此,这种原始的多线程编程效率和性能都不高。
2.1.3. 线程池
为了提升 Java 多线程编程的效率和性能,降低用户开发难度。JDK1.5 推出
了 java.util.concurrent 并发编程包。在并发编程类库中,提供了线程池、线
程安全容器、原子类等新的类库,极大的提升了 Java 多线程编程的效率,降低
了开发难度。
从 JDK1.5 开始,基于线程池的并发编程已经成为 Java 多核编程的主流。
javaQQqun425783133
剩余76页未读,继续阅读
资源评论
海拉姆
- 粉丝: 426
- 资源: 44
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功