Skip to content

Commit 737585b

Browse files
committedAug 22, 2022
[docs update]操作系统面试题
1 parent 81f1291 commit 737585b

15 files changed

+46
-41
lines changed
 

‎README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
> 1. **知识星球** :专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 [JavaGuide 知识星球](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc)(点击链接即可查看星球的详细介绍,一定一定一定确定自己真的需要再加入,一定一定要看完详细介绍之后再加我)。
3131
> 2. **转载须知** :以下所有文章如非文首说明为转载皆为我(Guide 哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
3232
33-
<div align="center">
34-
<img src="https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png" style="margin: 0 auto;" />
35-
</p>
33+
<div align="center">
34+
<img src="https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png" style="margin: 0 auto;" />
3635
</div>
3736

37+
3838
## 项目相关
3939

4040
* [项目介绍](./docs/javaguide/intro.md)

‎docs/.vuepress/config.ts

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module.exports = defineHopeConfig({
1010
dest: "./dist",
1111
// 是否开启默认预加载 js
1212
shouldPrefetch: (file, type) => false,
13+
1314
head: [
1415
// meta
1516
["meta", { name: "robots", content: "all" }],

‎docs/cs-basics/algorithms/string-algorithm-problems.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ tag:
55
- 算法
66
---
77

8-
> 授权转载!
8+
> 作者:wwwxmu
99
>
10-
> - 本文作者:wwwxmu
11-
> - 原文地址:https://www.weiweiblog.cn/13string/
10+
> 原文地址:https://www.weiweiblog.cn/13string/
1211
1312

1413
## 1. KMP 算法
Loading
Loading
Loading
-2.98 KB
Loading
Loading
Loading
Loading
Binary file not shown.

‎docs/cs-basics/operating-system/operating-system-basic-questions-01.md

+31-31
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ head:
1414

1515
很多读者抱怨计算操作系统的知识点比较繁杂,自己也没有多少耐心去看,但是面试的时候又经常会遇到。所以,我带着我整理好的操作系统的常见问题来啦!这篇文章总结了一些我觉得比较重要的操作系统相关的问题比如**进程管理****内存管理****虚拟内存**等等。
1616

17-
文章形式通过大部分比较喜欢的面试官和求职者之间的对话形式展开。另外,Guide 哥 也只是在大学的时候学习过操作系统,不过基本都忘了,为了写这篇文章这段时间看了很多相关的书籍和博客。如果文中有任何需要补充和完善的地方,你都可以在 issue 中指出!
17+
文章形式通过大部分同学比较喜欢的面试官和求职者之间的对话形式展开。另外,我也只是在大学的时候学习过操作系统,不过基本都忘了,为了写这篇文章这段时间看了很多相关的书籍和博客。
1818

1919
这篇文章只是对一些操作系统比较重要概念的一个概览,深入学习的话,建议大家还是老老实实地去看书。另外, 这篇文章的很多内容参考了《现代操作系统》第三版这本书,非常感谢。
2020

@@ -27,11 +27,11 @@ head:
2727

2828
关于如何学习操作系统,可以看这篇回答:[https://www.zhihu.com/question/270998611/answer/1640198217](https://www.zhihu.com/question/270998611/answer/1640198217)
2929

30-
## 操作系统基础
30+
## 操作系统基础
3131

3232
面试官顶着蓬松的假发向我走来,只见他一手拿着厚重的 Thinkpad ,一手提着他那淡黄的长裙。
3333

34-
### 1.1 什么是操作系统?
34+
### 什么是操作系统?
3535

3636
👨‍💻**面试官** : 先来个简单问题吧!**什么是操作系统?**
3737

@@ -44,7 +44,7 @@ head:
4444

4545
![Kernel_Layout](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-8/Kernel_Layout.png)
4646

47-
### 1.2 系统调用
47+
### 系统调用
4848

4949
👨‍💻**面试官****什么是系统调用呢?** 能不能详细介绍一下。
5050

@@ -69,21 +69,21 @@ head:
6969
- 进程通信。完成进程之间的消息传递或信号传递等功能。
7070
- 内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
7171

72-
## 进程和线程
72+
## 进程和线程
7373

74-
### 2.1 进程和线程的区别
74+
### 进程和线程的区别
7575

7676
👨‍💻**面试官**: 好的!我明白了!那你再说一下: **进程和线程的区别**
7777

7878
🙋 **我:** 好的! 下图是 Java 内存区域,我们从 JVM 的角度来说一下线程和进程之间的关系吧!
7979

80-
![](https://oscimg.oschina.net/oscnet/up-cd8ac705f6f004c01e0a1312f1599430ba5.png)
80+
![Java 运行时数据区域(JDK1.8 之后)](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/jvm/java-runtime-data-areas-jdk1.8.png)
8181

8282
从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的******方法区 (JDK1.8 之后的元空间)**资源,但是每个线程有自己的**程序计数器****虚拟机栈****本地方法栈**
8383

8484
**总结:** 线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。
8585

86-
### 2.2 进程有哪几种状态?
86+
### 进程有哪几种状态?
8787

8888
👨‍💻**面试官** : 那你再说说**进程有哪几种状态?**
8989

@@ -99,7 +99,7 @@ head:
9999
100100
![process-state](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-11/d38202593012b457debbcd74994c6292.png)
101101

102-
### 2.3 进程间的通信方式
102+
### 进程间的通信方式
103103

104104
👨‍💻**面试官****进程间的通信常见的的有哪几种方式呢?**
105105

@@ -115,7 +115,7 @@ head:
115115
1. **共享内存(Shared memory)** :使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。可以说这是最有用的进程间通信方式。
116116
1. **套接字(Sockets)** : 此方法主要用于在客户端和服务器之间通过网络进行通信。套接字是支持 TCP/IP 的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
117117

118-
### 2.4 线程间的同步的方式
118+
### 线程间的同步的方式
119119

120120
👨‍💻**面试官****那线程间的同步的方式有哪些呢?**
121121

@@ -125,7 +125,7 @@ head:
125125
1. **信号量(Semaphore)** :它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
126126
1. **事件(Event)** :Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
127127

128-
### 2.5 进程的调度算法
128+
### 进程的调度算法
129129

130130
👨‍💻**面试官****你知道操作系统中进程的调度算法有哪些吗?**
131131

@@ -139,13 +139,13 @@ head:
139139
- **多级反馈队列调度算法** :前面介绍的几种进程调度的算法都有一定的局限性。如**短进程优先的调度算法,仅照顾了短进程而忽略了长进程** 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前**被公认的一种较好的进程调度算法**,UNIX 操作系统采取的便是这种调度算法。
140140
- **优先级调度** : 为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。
141141

142-
### 2.6 什么是死锁
142+
### 什么是死锁
143143

144144
👨‍💻**面试官****你知道什么是死锁吗?**
145145

146146
🙋 **** :死锁描述的是这样一种情况:多个进程/线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于进程/线程被无限期地阻塞,因此程序不可能正常终止。
147147

148-
### 2.7 死锁的四个条件
148+
### 死锁的四个条件
149149

150150
👨‍💻**面试官****产生死锁的四个必要条件是什么?**
151151

@@ -158,7 +158,7 @@ head:
158158

159159
注意,只有四个条件同时成立时,死锁才会出现。
160160

161-
### 2.8 解决死锁的方法
161+
### 解决死锁的方法
162162

163163
解决死锁的方法可以从多个角度去分析,一般的情况下,有**预防,避免,检测和解除四种**
164164

@@ -219,7 +219,7 @@ head:
219219

220220
图中 2-21 是**进程-资源分配图**的一个例子,其中共有三个资源类,每个进程的资源占有和申请情况已清楚地表示在图中。在这个例子中,由于存在 **占有和等待资源的环路** ,导致一组进程永远处于等待资源的状态,发生了 **死锁**
221221

222-
![进程-资源分配图](./images/进程-资源分配图.jpg)
222+
![进程-资源分配图](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/cs-basics/operating-system/process-resource-allocation-diagram.jpg)
223223

224224
进程-资源分配图中存在环路并不一定是发生了死锁。因为循环等待资源仅仅是死锁发生的必要条件,而不是充分条件。图 2-22 便是一个有环路而无死锁的例子。虽然进程 P1 和进程 P3 分别占用了一个资源 R1 和一个资源 R2,并且因为等待另一个资源 R2 和另一个资源 R1 形成了环路,但进程 P2 和进程 P4 分别占有了一个资源 R1 和一个资源 R2,它们申请的资源得到了满足,在有限的时间里会归还资源,于是进程 P1 或 P3 都能获得另一个所需的资源,环路自动解除,系统也就不存在死锁状态了。
225225

@@ -240,15 +240,15 @@ head:
240240
3. **逐个撤销涉及死锁的进程,回收其资源直至死锁解除。**
241241
4. **抢占资源** :从涉及死锁的一个或几个进程中抢占资源,把夺得的资源再分配给涉及死锁的进程直至死锁解除。
242242

243-
## 操作系统内存管理基础
243+
## 操作系统内存管理基础
244244

245-
### 3.1 内存管理介绍
245+
### 内存管理介绍
246246

247247
👨‍💻 **面试官**: **操作系统的内存管理主要是做什么?**
248248

249249
🙋 **我:** 操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情。
250250

251-
### 3.2 常见的几种内存管理机制
251+
### 常见的几种内存管理机制
252252

253253
👨‍💻 **面试官**: **操作系统的内存管理机制了解吗?内存管理有哪几种方式?**
254254

@@ -266,7 +266,7 @@ head:
266266

267267
🙋 **** :谢谢面试官!刚刚把这个给忘记了~
268268

269-
### 3.3 快表和多级页表
269+
### 快表和多级页表
270270

271271
👨‍💻**面试官** : 页表管理机制中有两个很重要的概念:快表和多级页表,这两个东西分别解决了页表管理中很重要的两个问题。你给我简单介绍一下吧!
272272

@@ -290,15 +290,15 @@ head:
290290

291291
#### 多级页表
292292

293-
引入多级页表的主要目的是为了避免把全部页表一直放在内存中占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。多级页表属于时间换空间的典型场景,具体可以查看下面这篇文章
293+
引入多级页表的主要目的是为了避免把全部页表一直放在内存中占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。
294294

295-
- 多级页表如何节约内存:[https://www.polarxiong.com/archives/多级页表如何节约内存.html](https://www.polarxiong.com/archives/多级页表如何节约内存.html)
295+
多级页表属于时间换空间的典型场景。
296296

297297
#### 总结
298298

299299
为了提高内存的空间性能,提出了多级页表的概念;但是提到空间性能是以浪费时间性能为基础的,因此为了补充损失的时间性能,提出了快表(即 TLB)的概念。 不论是快表还是多级页表实际上都利用到了程序的局部性原理,局部性原理在后面的虚拟内存这部分会介绍到。
300300

301-
### 3.4 分页机制和分段机制的共同点和区别
301+
### 分页机制和分段机制的共同点和区别
302302

303303
👨‍💻**面试官****分页机制和分段机制有哪些共同点和区别呢?**
304304

@@ -311,13 +311,13 @@ head:
311311
- 页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程序。
312312
- 分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满足用户的需要。
313313

314-
### 3.5 逻辑(虚拟)地址和物理地址
314+
### 逻辑(虚拟)地址和物理地址
315315

316316
👨‍💻**面试官** :你刚刚还提到了**逻辑地址和物理地址**这两个概念,我不太清楚,你能为我解释一下不?
317317

318318
🙋 **我:** em...好的嘛!我们编程一般只有可能和逻辑地址打交道,比如在 C 语言中,指针里面存储的数值就可以理解成为内存里的一个地址,这个地址也就是我们说的逻辑地址,逻辑地址由操作系统决定。物理地址指的是真实物理内存中地址,更具体一点来说就是内存地址寄存器中的地址。物理地址是内存单元真正的地址。
319319

320-
### 3.6 CPU 寻址了解吗?为什么需要虚拟地址空间?
320+
### CPU 寻址了解吗?为什么需要虚拟地址空间?
321321

322322
👨‍💻**面试官****CPU 寻址了解吗?为什么需要虚拟地址空间?**
323323

@@ -346,9 +346,9 @@ head:
346346
- 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动。
347347
- 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。
348348

349-
## 虚拟内存
349+
## 虚拟内存
350350

351-
### 4.1 什么是虚拟内存(Virtual Memory)?
351+
### 什么是虚拟内存(Virtual Memory)?
352352

353353
👨‍💻**面试官** :再问你一个常识性的问题!**什么是虚拟内存(Virtual Memory)?**
354354

@@ -360,7 +360,7 @@ head:
360360

361361
> **虚拟内存** 使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如 RAM)的使用也更有效率。目前,大多数操作系统都使用了虚拟内存,如 Windows 家族的“虚拟内存”;Linux 的“交换空间”等。From:<https://zh.wikipedia.org/wiki/虚拟内存>
362362
363-
### 4.2 局部性原理
363+
### 局部性原理
364364

365365
👨‍💻**面试官** :要想更好地理解虚拟内存技术,必须要知道计算机中著名的**局部性原理**。另外,局部性原理既适用于程序结构,也适用于数据结构,是非常重要的一个概念。
366366

@@ -377,7 +377,7 @@ head:
377377

378378
时间局部性是通过将近来使用的指令和数据保存到高速缓存存储器中,并使用高速缓存的层次结构实现。空间局部性通常是使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现。虚拟内存技术实际上就是建立了 “内存一外存”的两级存储器的结构,利用局部性原理实现髙速缓存。
379379

380-
### 4.3 虚拟存储器
380+
### 虚拟存储器
381381

382382
> **勘误:虚拟存储器又叫做虚拟内存,都是 Virtual Memory 的翻译,属于同一个概念。**
383383
@@ -391,7 +391,7 @@ head:
391391

392392
实际上,我觉得虚拟内存同样是一种时间换空间的策略,你用 CPU 的计算时间,页的调入调出花费的时间,换来了一个虚拟的更大的空间来支持程序的运行。不得不感叹,程序世界几乎不是时间换空间就是空间换时间。
393393

394-
### 4.4 虚拟内存的技术实现
394+
### 虚拟内存的技术实现
395395

396396
👨‍💻**面试官****虚拟内存技术的实现呢?**
397397

@@ -413,7 +413,7 @@ head:
413413
2. **缺页中断**:如果**需执行的指令或访问的数据尚未在内存**(称为缺页或缺段),则由处理器通知操作系统将相应的页面或段**调入到内存**,然后继续执行程序;
414414
3. **虚拟地址空间** :逻辑地址到物理地址的变换。
415415

416-
### 4.5 页面置换算法
416+
### 页面置换算法
417417

418418
👨‍💻**面试官** :虚拟内存管理很重要的一个概念就是页面置换算法。那你说一下 **页面置换算法的作用?常见的页面置换算法有哪些?**
419419

@@ -432,7 +432,7 @@ head:
432432
- **LRU (Least Recently Used)页面置换算法(最近最久未使用页面置换算法)** :LRU 算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 T,当须淘汰一个页面时,选择现有页面中其 T 值最大的,即最近最久未使用的页面予以淘汰。
433433
- **LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法)** : 该置换算法选择在之前时期使用最少的页面作为淘汰页。
434434

435-
## Reference
435+
## 参考
436436

437437
- 《计算机操作系统—汤小丹》第四版
438438
- [《深入理解计算机系统》](https://book.douban.com/subject/1230413/)
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<mxfile host="Electron" modified="2022-08-21T12:40:37.540Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="lr4caBKy7jjWoYtJBxep" version="13.4.5" type="device"><diagram id="9BE8MdjfxC0TaVaDFPY0" name="Page-1">7Vrbcuo2FP0aPSbjq2w9YnDSezPNQ9unjmILcGIsakSAfn0lWcYXiQROIJwMzJk5sbZu9l57SUsbAXc4W9+XeD79laYkB46VroE7Ao5j2xbkf4RlU1kQCirDpMxS1agxPGb/EWW0lHWZpWTRacgozVk27xoTWhQkYR0bLku66jYb07w76xxPiGZ4THCuW//MUjatvwuipuIHkk2m9dTQ96qaGa5bq09ZTHFKVy2TGwN3WFLKqqfZekhy4b3aMVW/ux212zcrScH26UAWz8U/Nw9/4FFK2f08uik3P9+oUV5xvlRfrF6WbWoXlHRZpEQMYgM3Wk0zRh7nOBG1Kw46t03ZLFfVKV5Mt23V2KRkZL3zpe2tK3gQETojrNzwJnWHUHlPxY/tqfKqhUbt4WkLCM9SRqwiYLIdu/ERf1BuOsBlju6y2AcDH/DQjiEIY/EsLCNQB3vLm9wVrOuyBSvpCxnSnJbcUtCCt4zGWZ73TDjPJgUvJtx1hNsj4diMh+pAVcyyNBXTGDFqULT6MI1pwRTzHOs4sDlWDzaowxYaUHNOBpqlIUFSznRVpCWb0gktcB431p7Pmja/UDpXvnsmjG2U8/CS0S603Fvl5i/VXxb+FoVbvy6O1u3K0UaVWojYcIuIeOG38eDfR5dlQt5whKsWUVxOCHujXWDGtyQ5Ztlr9z2OjparUWxBkxfCbB3EPOdbwa6gb0HRd2mbYMBxU0zCcaKxkdfAJCRP4yOtZsjv0GJLkzYtfJ0WwcloYfDoRdLC+wq08HbQQt+zvzYt3LPTwuDR09PihOHtfzBsVdcHmvGZt7h5vV3edXuAVHRSvRpMBmWJN61mc9FgsXse1+vO4wV+e7h329fv1YRE9QZNgGx98u0x4+8g529fnJx9KecZFPinkhNqjtY9XKQDcfhrxHNH8PbOKw+YcUFdSItjuVuH1gc+Z6dGfp+bultbbvMNCri2fZCajotuu4uq1ydntWho5NxjKDfcj+fHopbjXlVKoz72UCnhOVVKoPHzRz7O79wkT8UeQAMQhyAKwOBOWcIRiAOAPDAIxQP/P4xEVTQA4Z2G/UEJiT5xe2voeExgYlxD0wA9WUc6DmsbpUHg2KbzMDzVIhrqi2gMAYIgDEDsgSgCEZSWQD4g+eAJTEIOjqzixSgWFoQEYqdFaezsQAk+QR8eByWIvjeU0Ptb3Vmzcwj20jyOwWPQ4DHvZOqgThx3ItuTK0nUiuxq2fHksmPJgN4Vx5eRsENhd4s3Jexs24DkyTJ2tn7aveo8TZzZlqbO/L4621fomcba80R3LKVn66coyUwbRCPFXs5brh64dIhkuj2yQegcwudv3ZdMJzBipz4JTPsSgoGLj7QvoaCfNfR1brqfuS/ZhjOYASZuiQCKWyLvomBChiX0c2HSpbhU3ncSlNZPVXx3RBIU8ZuVd1kwucHZYTKJcU6iUPCoYhNHygjc5cDk+eeGyfF0/XGRWQgVXu9mIeyPZp0/Bpd/heswuOBZ4YJXuA6D66w/RTr6zZYrXG/CddacrGOQGA7MmfJNB0j475LWFTcL6bUBb2DD+bqp5E8T+VdkBLkOGUqhMpR3oHyRtBWnsztpGfyEX/G9uMdXT/lUNt0DcWTgBwchPiOhXupez7yXvP13mxR1R/7t1euq3t9nribHTySPcPIykfb+5K1YDFW5paEi+U+OyXhg0EINunghLJnWhfoq4ZGyP9tjfn10Md2yM2U+7cPFFi82dx6rvEFzddSN/wc=</diagram></mxfile>
1+
<mxfile host="Electron" modified="2022-08-22T01:01:48.794Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="nH91fIJ1FQXltYQjMT6B" version="13.4.5" type="device"><diagram id="9BE8MdjfxC0TaVaDFPY0" name="Page-1">7Vrbcuo2FP0aPSbjq2w/2uCk92aah7ZPHcUW4MRY1IgA/fpKtoQvEgTOMQkZMmfmxNq62XvtJS1tBOzRfHNfosXsV5LiHFhGugH2GFiWaRqQ/eGWbW0JAq82TMssFY0aw2P2HxZGQ1hXWYqXnYaUkJxmi64xIUWBE9qxobIk626zCcm7sy7QFCuGxwTlqvXPLKUz+V0waCp+wNl0JqeGrlPXzJFsLT5lOUMpWbdMdgzsUUkIrZ/mmxHOufekY+p+d3tqd29W4oIe0wEvn4t/bh7+QOOU0PtFdFNuf74Ro7yifCW+WLws3UoXlGRVpJgPYgI7Ws8yih8XKOG1awY6s83oPBfVKVrOdm3VN5TT4ZLiTcsk3vgekzmm5ZY1kbW+8J6IH9MR5XULDenhWQsIxxBGJCJguhu78RF7EG46wWWW6rLYBaELWGjHEPgxf+aWMZDB3vIm+27addmSluQFj0hOSmYpSMFaRpMsz3smlGfTghUT5k3M7BH3YsZCNRQV8yxN+TRajBoUjT5ME1JQwTzLGAY2y+jBBlXYfA1q1tlAMxQkcMqYLoqkpDMyJQXK48ba81nT5hdCFsJ3z5jSrXAeWlHShZY5sNz+JfpXhb954daVxfGmXTneilILERMeQmRJVmWCD3y3LdZMVE4xPdBOBCr3yUF8S5wjmr12V8fB0bIVii1J8oKpqYKY52wr2Bf0LSj6Lm0TDFh2irA/SRQ2shqY+PhpMtBqFrgdWuxo0qaFq9LCOxstNB69Blo4n5IWzh5aqHv256aF/eG00Hj0/LQYLrzdocNWdH0gGXuVHW5Ob5e37R4gNb9ErwaTsCzRttVswRss989jO915HM9tD/dme/leTUjUb9AEyM4n3x4z7h5y/vbJydmXco5Ggb8rOaHiaNXDRRryw18jnjuCt3deeUCUCeqisliGvXOoPPBZp2jkNznXcpurUcDS9p3UtOzgtruoOn1y1quIQs4jhrL943g+FLUs+zpVinekSvEvSqV4Cj9/ZOP8zkzVqdgBQQhiH0QeCO+ExR+D2AOBA0KfP7D//YhXRSHw7xTsT0pI9InbW0MnEwwT7RqaesGTMdBxWNkoNQLH1J2H4bkWUV9dRGMIAgh8D8QOiCIQweohrKDYWVzgM3AgbxwxY8wtQcAROy9KE2sPSvAJugdZdjxKMLg0lIK3t7oPzc4FsJfmsTQegxqPOWdTBzJx3IlsXRzzZceplh2jCuh9cXwdCbvA727xuoSdaWqQPFvGzlRPu186TxFnpqGoM7evzo4VerqxjjzRDaX0TPUUVTHTBNFYsJfxlqkHJh2iKt0emcC3TuHzt+5LuhMYNlMXe7p9KYCejQbalwKvnzV0VW7a77kvmZozmAYmZolAELdE3lXBFGiW0PeFSZXilfK+q0Bp/VTFdsegAoX/ZuVcF0y29+Ew6cQ4I5HPeVSziSGlBe56YHLcj4bJclT9cQ1ZCBFNb2YhzMGzzt8Hl/sF10G44GXBBb/gOgjXZf0Uaak3W77g0uzplwKXRmJYMKfCNx0g4b8rIitulpXXQtbAhItNU8meptVfnhFkOmRUCZVRdQfK5Ulbfjq7qyzhT+gV3fN7fHLKp7Lp7vEjAzs4cPEZcfUiez2zXtXtv9ukkB3Zt9evK3pfZq4mR084j1DyMq3s/clbseiLcktDRdW/akzKAoMUYtDlC6bJTBbkVcKBsj+7Y748uuhu2ekyn+bpYosVmzuPdd6guTpqx/8D</diagram></mxfile>
Loading

‎docs/database/redis/redis-questions-01.md

+8-3
Original file line numberDiff line numberDiff line change
@@ -224,11 +224,14 @@ PFCOUNT PAGE_1:UV
224224

225225
**既然是单线程,那怎么监听大量的客户端连接呢?**
226226

227-
Redis 通过**IO 多路复用程序** 来监听来自客户端的大量连接(或者说是监听多个 socket),它会将感兴趣的事件及类型(读、写)注册到内核中并监听每个事件是否发生。
227+
Redis 通过 **IO 多路复用程序** 来监听来自客户端的大量连接(或者说是监听多个 socket),它会将感兴趣的事件及类型(读、写)注册到内核中并监听每个事件是否发生。
228228

229229
这样的好处非常明显: **I/O 多路复用技术的使用让 Redis 不需要额外创建多余的线程来监听客户端的大量连接,降低了资源的消耗**(和 NIO 中的 `Selector` 组件很像)。
230230

231-
另外, Redis 服务器是一个事件驱动程序,服务器需要处理两类事件:1. 文件事件; 2. 时间事件。
231+
另外, Redis 服务器是一个事件驱动程序,服务器需要处理两类事件:
232+
233+
- **文件事件(file event)** :用于处理 Redis 服务器和客户端之间的网络IO。
234+
- **时间事件(time eveat)** :Redis 服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是处理这类定时操作的。
232235

233236
时间事件不需要多花时间了解,我们接触最多的还是 **文件事件**(客户端进行读取写入等操作,涉及一系列网络通信)。
234237

@@ -247,7 +250,9 @@ Redis 通过**IO 多路复用程序** 来监听来自客户端的大量连接(
247250
- 文件事件分派器(将 socket 关联到相应的事件处理器)
248251
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
249252

250-
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/database/redis/redis-event-handler.png)
253+
![文件事件处理器](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/database/redis/redis-event-handler.png)
254+
255+
相关阅读:[Redis 事件机制详解](http://remcarpediem.net/article/1aa2da89/)
251256

252257
### Redis6.0 之前为什么不使用多线程?
253258

0 commit comments

Comments
 (0)
Please sign in to comment.