Skip to content

Commit f3ac1c9

Browse files
authored
Merge pull request #288 from Fitz161/patch-1
Fix typo in cpu_mesi.md
2 parents 9293ec4 + 5fb9eb5 commit f3ac1c9

File tree

3 files changed

+5
-5
lines changed

3 files changed

+5
-5
lines changed

os/1_hardware/cpu_mesi.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ CPU 在读写数据的时候,都是在 CPU Cache 读写数据的,原因是 C
189189
要想实现缓存一致性,关键是要满足 2 点:
190190

191191
- 第一点是写传播,也就是当某个 CPU 核心发生写入操作时,需要把该事件广播通知给其他核心;
192-
- 第二点是事物的串行化,这个很重要,只有保证了这个,才能保障我们的数据是真正一致的,我们的程序在各个不同的核心上运行的结果也是一致的;
192+
- 第二点是事务的串行化,这个很重要,只有保证了这个,才能保障我们的数据是真正一致的,我们的程序在各个不同的核心上运行的结果也是一致的;
193193

194194
基于总线嗅探机制的 MESI 协议,就满足上面了这两点,因此它是保障缓存一致性的协议。
195195

os/8_network_system/hash.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ hash(key) % 3
192192

193193
为了解决一致性哈希算法不能够均匀的分布节点的问题,就需要引入虚拟节点,对一个真实节点做多个副本。不再将真实节点映射到哈希环上,而是将虚拟节点映射到哈希环上,并将虚拟节点映射到实际节点,所以这里有「两层」映射关系。
194194

195-
引入虚拟节点后,可以会提高节点的均衡度,还会提高系统的稳定性。所以,带虚拟节点的一致性哈希方法不仅适合硬件配置不同的节点的场景,而且适合节点规模会发生变化的场景。
195+
引入虚拟节点后,会提高节点的均衡度,还会提高系统的稳定性。所以,带虚拟节点的一致性哈希方法不仅适合硬件配置不同的节点的场景,而且适合节点规模会发生变化的场景。
196196

197197
完!
198198

os/8_network_system/reactor.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ Reactor 模式是灵活多变的,可以应对不同的业务场景,灵活在
109109
### 单 Reactor 单进程 / 线程
110110

111111

112-
一般来说,C 语言实现的是「**单 Reactor *单进程***」的方案,因为 C 语编写完的程序,运行后就是一个独立的进程,不需要在进程中再创建线程。
112+
一般来说,C 语言实现的是「**单 Reactor *单进程***」的方案,因为 C 语言编写完的程序,运行后就是一个独立的进程,不需要在进程中再创建线程。
113113

114114
而 Java 语言实现的是「**单 Reactor *单线程***」的方案,因为 Java 程序是跑在 Java 虚拟机这个进程上面的,虚拟机中有很多线程,我们写的 Java 程序只是其中的一个线程而已。
115115

@@ -140,7 +140,7 @@ Reactor 模式是灵活多变的,可以应对不同的业务场景,灵活在
140140
- 第一个缺点,因为只有一个进程,**无法充分利用 多核 CPU 的性能**
141141
- 第二个缺点,Handler 对象在业务处理时,整个进程是无法处理其他连接的事件的,**如果业务处理耗时比较长,那么就造成响应的延迟**
142142

143-
所以,单 Reactor 单进程的方案**不适用计算机密集型的场景,只适用于业务处理非常快速的场景**
143+
所以,单 Reactor 单进程的方案**不适用计算密集型的场景,只适用于业务处理非常快速的场景**
144144

145145
Redis 是由 C 语言实现的,它采用的正是「单 Reactor 单进程」的方案,因为 Redis 业务处理主要是在内存中完成,操作的速度是很快的,性能瓶颈不在 CPU 上,所以 Redis 对于命令的处理是单进程的方案。
146146

@@ -257,7 +257,7 @@ Proactor 正是采用了异步 I/O 技术,所以被称为异步网络模型。
257257

258258

259259

260-
因此,**Reactor 可以理解为「来了事件操作系统通知应用进程,让应用进程来处理」**,而 **Proactor 可以理解为「来了事件操作系统来处理,处理完再通知应用进程」**。这里的「事件」就是有新连接、有数据可读、有数据可写的这些 I/O 事件这里的「处理」包含从驱动读取到内核以及从内核读取到用户空间。
260+
因此,**Reactor 可以理解为「来了事件操作系统通知应用进程,让应用进程来处理」**,而 **Proactor 可以理解为「来了事件操作系统来处理,处理完再通知应用进程」**。这里的「事件」就是有新连接、有数据可读、有数据可写的这些 I/O 事件,这里的「处理」包含从驱动读取到内核以及从内核读取到用户空间。
261261

262262
举个实际生活中的例子,Reactor 模式就是快递员在楼下,给你打电话告诉你快递到你家小区了,你需要自己下楼来拿快递。而在 Proactor 模式下,快递员直接将快递送到你家门口,然后通知你。
263263

0 commit comments

Comments
 (0)