Skip to content

Commit fd2710d

Browse files
committed
1. 删除 async 源码解析中无用空行 #12
2. 为第一章基本概念,并行新增 mermaid 示意图
1 parent 1a1e8eb commit fd2710d

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

Diff for: md/01基本概念.md

+38
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,44 @@
2424

2525
  在现在,我们日常使用的机器,基本上是二者都有。我们现在的 CPU 基本都是多核,而操作系统调度基本也一样有任务切换,因为要执行的任务非常之多,CPU 是很快的,但是核心却没有那么多,不可能每一个任务都单独给一个核心。大家可以打开自己电脑的任务管理器看一眼,进程至少上百个,线程更是上千。这基本不可能每一个任务分配一个核心,都并行,而且也没必要。正是任务切换使得这些后台任务可以运行,这样系统使用者就可以同时运行文字处理器、编译器、编辑器和 Web 浏览器。
2626

27+
```mermaid
28+
graph TD;
29+
subgraph "多核机器的真正并行"
30+
MultiCore[多核机器的真正并行]
31+
CPU1[CPU1]
32+
CPU2[CPU2]
33+
CPU3[CPU3]
34+
35+
MultiCore --> CPU1
36+
MultiCore --> CPU2
37+
MultiCore --> CPU3
38+
39+
CPU1 --> Task1[任务1]
40+
CPU2 --> Task2[任务2]
41+
CPU3 --> Task3[任务3]
42+
end
43+
44+
style MultiCore, CPU1, CPU2, CPU3, Task1, Task2, Task3 fill:#fff,stroke:#333,stroke-width:2px;
45+
46+
```
47+
48+
```mermaid
49+
graph TD;
50+
subgraph "单核机器的任务切换"
51+
SingleCore[单核机器的任务切换]
52+
SingleCore --> OS[操作系统调度]
53+
OS --> TaskSwitching[任务切换]
54+
TaskSwitching --> Task1[任务1执行片段]
55+
TaskSwitching --> Task2[任务2执行片段]
56+
TaskSwitching --> Task3[任务3执行片段]
57+
end
58+
59+
style SingleCore, OS, TaskSwitching, Task1, Task2, Task3 fill:#fff,stroke:#333,stroke-width:2px;
60+
61+
```
62+
63+
64+
2765
## 并发与并行
2866

2967
事实上,对于这两个术语,并没有非常公认的说法。

Diff for: md/详细分析/03async与future源码解析.md

-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,6 @@ _NODISCARD_ASYNC future<_Invoke_result_t<decay_t<_Fty>, decay_t<_ArgTypes>...>>
243243
| - _Assoc_state | -----> +-------------------------+
244244
| - _Get_only_once | | _Associated_state<_Ty> |
245245
+----------------------+ +-------------------------+
246-
247246
```
248247

249248
上图是 `_Promise`_`State_manager``_Associated_state` 之间的**包含关系示意图**,理解这个关系对我们后面**非常重要**

0 commit comments

Comments
 (0)