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