我对此感到困惑...如果一个 CPU 有 2 个逻辑核心,它可以 100% 同时运行两个程序,对吗?否则,一个 CPU 上的 2 个程序必须 100% 分时(不能独立运行,因为同一个单核必须在上下文之间切换等)。如果这是真的,那么内核和线程之间的程序共享情况如何?
例如,假设我在 2 个核心上运行 100 个进程...操作系统是否会尝试在每个核心上分配 50 个进程以实现负载平衡?它们会随机分散吗?
假设我在四核 Intel 芯片上启动 mspaint.exe ... 它会从哪里执行(核心 1、2、3、4?),它会一直在那里执行直到关闭吗?基本上,哪个逻辑 CPU 会对哪个程序执行什么操作,并且当程序运行时,内核是否会从 RAM 并行处理不同的执行点?
另外,如果您在 4 个核心上使用 200 个线程和 100 个进程,会怎样?每个线程是否会保留在负载平衡核心上的上下文之间?
最后一个问题:真的有可能直接选择特定核心或为多核心编写程序,而无需透明守护程序或操作系统为您随机执行此操作吗?如果所有人都说“只使用线程”,那么如何做到这一点?使用多线程是否映射到核心?如果是这样,如果单核上的线程不能同时工作,如何在没有操作系统干预的情况下使用针对核心量身定制的线程?
答案1
正如另一位用户所评论的,它主要依赖于操作系统。
如果一个 CPU 有 2 个逻辑核心,它可以 100% 同时运行两个程序,对吗?
例如,假设我在 2 个核心上运行 100 个进程...操作系统是否会尝试在每个核心上分配 50 个进程以实现负载平衡?它们会随机分散吗?
每个操作系统都有自己的调度算法。
假设我在四核英特尔芯片上启动 mspaint.exe...它将从哪里执行(核心 1、2、3、4?),并且它会在那里持续执行直到关闭吗?
我们不知道它将在何处执行,并且很可能不会在同一核心上从头到尾继续执行。同样,这取决于操作系统调度程序。
是否真的可以选择特定的核心或直接为多核编写程序,而无需透明守护进程或操作系统为您随机执行此操作?
显然是的:https://stackoverflow.com/questions/663958/how-to-control-which-core-a-process-runs-on
如果所有人都说“只使用线程”,那怎么办?使用多线程是否映射到核心?如果是这样,如果单核上的线程不能同时工作,如何在没有操作系统干预的情况下使用针对核心定制的线程?
我不明白这里的问题,但线程的基本思想是你创建它们并且操作系统使用它的调度算法运行,你不需要控制它将在哪个逻辑或物理核心中运行(可能有些情况下你可能想要这样做,我不确定为什么)。