Skip to content

Commit 93b7663

Browse files
committed
更新 CPU 变量的内容
1 parent a282044 commit 93b7663

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

md/03共享数据.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -993,11 +993,13 @@ MSVC 无法使用 GCC 的编译器扩展,GCC 也肯定无法使用 MSVC 的扩
993993
994994
## CPU 变量
995995
996-
CPU 变量的概念很好理解。就像线程变量为每个线程提供独立的对象实例,互不干扰一样,CPU 变量也是如此。
996+
CPU 变量的概念很好理解。就像线程变量为每个线程提供独立的对象实例,互不干扰一样,CPU 变量也是如此。在创建 CPU 变量时,系统上的每个 CPU [^2] 都会获得该变量的一个副本。
997997
998-
在创建 CPU 变量时,系统上的每个 CPU [^2] 都会获得该变量的一个副本
998+
在 Linux 内核中,从 2.6[^3] 版本开始引入了 **Per-CPU** 变量(Per-CPU variables)功能。Per-CPU 变量是为每个处理器单独分配的变量副本,旨在减少多处理器访问共享数据时的同步开销,提升性能。每个处理器只访问自己的变量副本,不需要进行同步操作,避免了数据竞争,增强了并行处理能力
999999
1000-
实际上,这就是在说 Linux 2.6 [^3]引入的 **Per-CPU** 内核功能。
1000+
在 Windows 内核中,没有直接对应的 Per-CPU 变量机制。
1001+
1002+
本节是偏向概念的认识,而非实际进行内核编程,C++ 语言层面也并未提供此抽象。理解 CPU 变量的概念对于系统编程和内核开发非常重要。这些概念在面试和技术讨论中常常出现,掌握这些知识不仅有助于应对面试问题,也能提升对多处理器系统性能优化的理解。
10011003
10021004
[^2]: “*每个 CPU*”,指的是系统中的每个物理处理器或每个逻辑处理器(如果超线程被启用)。
10031005

0 commit comments

Comments
 (0)