java - 运行多个线程的多个处理器 - 可变关键字 Java
问题描述
有人可以帮我理解以下概念吗?我正在按照此处显示的链接研究 Java 中的 Volatile 关键字:https ://www.geeksforgeeks.org/volatile-keyword-in-java/
volatile 的意思似乎是有道理的:在一个线程中所做的更改会立即反映在另一个线程中
文章的解释说:“下图显示如果两个线程在不同的处理器上运行,那么 sharedVariable 的值可能在不同的线程中不同。”
我的问题是他们怎么可能是两个处理器?这些是同一个 CPU 的一部分吗?运行应用程序或程序的计算机不会只有一个处理器吗?
在对此进行解释后,“volatile”关键字将如何确保“一个线程中所做的更改立即反映在另一个线程中”
解决方案
他们怎么可能是两个处理器?这些是同一个 CPU 的一部分吗?
“处理器”通常是 CPU 的同义词。如今,大多数台式电脑、大多数服务器,甚至大多数手机和平板电脑都拥有不止一个 CPU。通常,它们包含一个对称多处理器系统(SMP),其中所有 CPU 共享相同的公共内存系统。
在一些高性能计算应用程序中,您会发现NUMA 系统,它是 SMP 系统和计算集群之间的一种混合体。在 NUMA 系统中,每个 CPU 都有自己的专用内存区域,它可以以低开销访问;但每个人也可以访问其对等方的内存区域,但开销更大。
“核心”是什么意思?
如今, SMP 计算机如此普遍,以至于许多“CPU”/“处理器”芯片实际上包含多个 CPU。当您听到“核心”时,通常是指多处理器芯片中的单个处理器。
但请注意:这些词现在变得有点模棱两可,所以无论有人说“CPU”、“核心”还是“处理器”,您都可能想请他们准确解释它们的意思。
什么是......“虚拟处理器”?
好像还不够复杂!
如今,一些 CPU 具有称为超线程的功能。超线程处理器通常具有两套完整的上下文寄存器。这使得单个 CPU 可以立即在两个不同的线程之间来回切换其注意力。CPU 也可能有一些使用最频繁的子系统的副本,这使其在并行执行两个线程的指令方面的能力有限。例如,它可以代表一个线程获取内存操作数,同时代表另一个线程执行寄存器算术。
从操作系统的角度来看,单个超线程 CPU 表现为两个“虚拟”CPU。虽然,根据复制的系统数量,它的整体性能可能在范围内的任何地方,从与单个 CPU 相同到与两个完整 CPU 相同。
虚拟 CPU 有时也被称为“硬件线程”。
推荐阅读
- css - 如何分隔scss函数返回值
- php - 关闭用户 Laravel 的当前会话
- assembly - 如何将基数 2 存储在寄存器中?
- html - 调整容器大小后排列带有过渡的元素
- ubuntu - 如何在 Ubuntu VM 上的 Minikube 中使用代理?
- java - 当有效ID与文件不匹配时在java中设置文件修改时间
- java - 如何在android NavigationComponent中手动关闭片段
- dart - 在一行中对齐 TextField 和 FlatButton
- python-3.x - Matplotlib 切换数据源后返回图形开头
- visual-studio - 在 Chrome 中运行 Jasmine 测试