File tree Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Original file line number Diff line number Diff line change @@ -109,7 +109,7 @@ Reactor 模式是灵活多变的,可以应对不同的业务场景,灵活在
109
109
### 单 Reactor 单进程 / 线程
110
110
111
111
112
- 一般来说,C 语言实现的是「** 单 Reactor * 单进程*** 」的方案,因为 C 语编写完的程序 ,运行后就是一个独立的进程,不需要在进程中再创建线程。
112
+ 一般来说,C 语言实现的是「** 单 Reactor * 单进程*** 」的方案,因为 C 语言编写完的程序 ,运行后就是一个独立的进程,不需要在进程中再创建线程。
113
113
114
114
而 Java 语言实现的是「** 单 Reactor * 单线程*** 」的方案,因为 Java 程序是跑在 Java 虚拟机这个进程上面的,虚拟机中有很多线程,我们写的 Java 程序只是其中的一个线程而已。
115
115
@@ -140,7 +140,7 @@ Reactor 模式是灵活多变的,可以应对不同的业务场景,灵活在
140
140
- 第一个缺点,因为只有一个进程,** 无法充分利用 多核 CPU 的性能** ;
141
141
- 第二个缺点,Handler 对象在业务处理时,整个进程是无法处理其他连接的事件的,** 如果业务处理耗时比较长,那么就造成响应的延迟** ;
142
142
143
- 所以,单 Reactor 单进程的方案** 不适用计算机密集型的场景 ,只适用于业务处理非常快速的场景** 。
143
+ 所以,单 Reactor 单进程的方案** 不适用计算密集型的场景 ,只适用于业务处理非常快速的场景** 。
144
144
145
145
Redis 是由 C 语言实现的,它采用的正是「单 Reactor 单进程」的方案,因为 Redis 业务处理主要是在内存中完成,操作的速度是很快的,性能瓶颈不在 CPU 上,所以 Redis 对于命令的处理是单进程的方案。
146
146
@@ -257,7 +257,7 @@ Proactor 正是采用了异步 I/O 技术,所以被称为异步网络模型。
257
257
258
258
259
259
260
- 因此,** Reactor 可以理解为「来了事件操作系统通知应用进程,让应用进程来处理」** ,而 ** Proactor 可以理解为「来了事件操作系统来处理,处理完再通知应用进程」** 。这里的「事件」就是有新连接、有数据可读、有数据可写的这些 I/O 事件这里的 「处理」包含从驱动读取到内核以及从内核读取到用户空间。
260
+ 因此,** Reactor 可以理解为「来了事件操作系统通知应用进程,让应用进程来处理」** ,而 ** Proactor 可以理解为「来了事件操作系统来处理,处理完再通知应用进程」** 。这里的「事件」就是有新连接、有数据可读、有数据可写的这些 I/O 事件,这里的 「处理」包含从驱动读取到内核以及从内核读取到用户空间。
261
261
262
262
举个实际生活中的例子,Reactor 模式就是快递员在楼下,给你打电话告诉你快递到你家小区了,你需要自己下楼来拿快递。而在 Proactor 模式下,快递员直接将快递送到你家门口,然后通知你。
263
263
You can’t perform that action at this time.
0 commit comments