File tree 1 file changed +68
-0
lines changed
1 file changed +68
-0
lines changed Original file line number Diff line number Diff line change 23
23
24
24
25
25
26
+ #### Netty NIO 中的Reactor 开发模式
27
+
28
+ Netty 三种开发模式版本
29
+
30
+ - BIO 下是 Thread-Per-Connection
31
+
32
+ <img src =" https://tva1.sinaimg.cn/large/008i3skNly1gyolp1ody6j31fy0kggpn.jpg " alt =" image-20220124112504631 " style =" zoom :40% ;" algin =" left " />
33
+
34
+ *** Thread-Per-Connection:对应每个连接都有1个线程处理,1个线程同时处理:读取、解码、计算、编码、发送***
35
+
36
+
37
+
38
+ - NIO 下是 Reactor
39
+
40
+ <img src =" https://tva1.sinaimg.cn/large/008i3skNly1gyolp5zqpaj316w0pmadn.jpg " alt =" image-20220124112753682 " style =" zoom :40% ;" align =" left " >
41
+
42
+ *** Reactor 多线程模式,由多个线程负责:读取、发送,由线程池负责处理:解码、计算、编码***
43
+
44
+ *** Reactor 主从多线程模式,由单独mainReactor 单线程负责接收请求,subReactor和 Reactor 多线程模式一致***
45
+
46
+
47
+
48
+ - AIO 下是 Proactor
49
+
50
+ Reactor 是一种开发模式,模式的核心流程:
51
+
52
+ > 注册感兴趣的事件 -> 扫描是否有感兴趣的事件发生 -> 事件发生后做出相应的处理
53
+
54
+
55
+
56
+ ##### Netty下使用 NIO 示范例
57
+
58
+ - Reactor 单线程模式
59
+
60
+ - ``` java
61
+ // 线程数1
62
+ EventLoopGroup eventGroup = new NioEventLoopGroup (1 );
63
+
64
+ ServerBootStrap serverBootStrap = new ServerBootStrap ();
65
+ serverBootStrap. group(eventGroup);
66
+ ```
67
+
68
+ - Reactor 多线程模式
69
+
70
+ - ```java
71
+ // 多线程,不传具体的线程数时,Netty会根据CPU核心数分配
72
+ EventLoopGroup eventGroup = new NioEventLoopGroup ();
73
+
74
+ ServerBootStrap serverBootStrap = new ServerBootStrap ();
75
+ serverBootStrap. group(serverBootStrap);
76
+ ```
77
+
78
+ - Reactor 主从多线程模式
79
+
80
+ - ```java
81
+ // 主线程负责接收请求 acceptor,是单线程
82
+ EventLoopGroup bossGroup = new NioEventLoopGroup ();
83
+ // 从线程负责:读取、解码、计算、编码、发送,是多线程
84
+ EventLoopGroup workerGroup = new NioEventLoopGroup ();
85
+
86
+ SeverBootStrap serverBootStrap = new ServerBootStrap ();
87
+ serverBootStrap. group(bossGroup, workerGroup);
88
+ ```
89
+
90
+
91
+
92
+
93
+
26
94
27
95
28
96
You can’t perform that action at this time.
0 commit comments