- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在单核 CPU 上,每个进程都在操作系统中运行,CPU 从一个进程跳转到另一个进程以充分利用自身。一个进程可以有多个线程,在这种情况下,CPU 在各自的进程上运行时会通过这些线程运行。
现在,在多核 CPU 上:
内核是否在每个进程中一起运行,或者内核可以在某个特定时间点在不同进程中单独运行吗?例如,您有程序 A 运行两个线程。双核CPU可以运行这个程序的两个线程吗?我认为如果我们使用像 OpenMP 这样的东西,答案应该是肯定的。 。但是,当内核在此 OpenMP 嵌入式进程中运行时,其中一个内核是否可以简单地切换到其他进程?
对于单核创建的程序,在100%运行时,为什么每个核的CPU利用率是分布的? (例如,双核 CPU 为 80% 和 20%。在这种情况下,所有核心的利用率始终加起来为 100%。)核心是否尝试通过以某种方式运行每个线程、每个进程来互相帮助?
最佳答案
核心(或 CPU)是计算机执行代码的物理元素。通常,每个内核都具有执行计算、寄存器文件、中断线等所需的所有元素。
大多数操作系统将应用程序表示为进程。这意味着应用程序有自己的地址空间(==内存 View ),操作系统确保该 View 及其内容与其他应用程序隔离。
进程由一个或多个线程组成,它们通过在CPU上执行机器代码来执行应用程序的实际工作。操作系统决定哪个线程在哪个 CPU 上执行(通过使用巧妙的启发式方法来改善负载平衡、能耗等)。如果您的应用程序仅包含一个线程,那么您的整个多 CPU 系统不会对您有太大帮助,因为它仍然只为您的应用程序使用一个 CPU。 (但是,整体性能仍可能会提高,因为操作系统将在其他 CPU 上运行其他应用程序,因此它们不会与第一个 CPU 混合)。
现在回答您的具体问题:
1) 操作系统通常允许您至少给出有关您想要在哪个核心上执行某些线程的提示。 OpenMP 的作用是生成代码,生成一定数量的线程,以将程序循环中的共享计算工作分配到多个线程中。它可以使用操作系统的提示机制(请参阅:线程关联)来执行此操作。然而,OpenMP 应用程序仍将与其他应用程序同时运行,因此操作系统可以自由地中断其中一个线程并在 CPU 上安排其他(可能不相关的)工作。实际上,根据您的具体情况,您可能需要应用许多不同的调度方案,但这是非常具体的,大多数时候您应该能够相信您的操作系统会为您做正确的事情。
2) 即使您在多核 CPU 上运行单线程应用程序,您也会注意到其他 CPU 也在工作。这是a)来自同时执行其工作的操作系统,b)来自您的应用程序永远不会单独运行的事实——每个正在运行的系统都由一大堆并发执行的任务组成。检查 Windows 的任务管理器(或 Linux 上的 ps/top)来检查正在运行的内容。
关于multithreading - SMP 内核、进程和线程究竟如何协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2986931/
我想插入 备注 关于要在我的 latex 文档的特定位置进行的修复 也许有一个 列表的“待办事项/修复我” 你怎么处理这个? 似乎一种方法是使用 fixme 包,但我无法使其工作。 有人在用吗? 最佳
错误:无法创建表。我已经创建了一个数据库,并且已经提供了所有特权。但仍然无法登录协作模块。我受够了,但我不想放弃。我已经尝试了所有可能的方法,但都行不通。 Stackoverflow 是我所知道的最好
我是一名优秀的程序员,十分优秀!