![在现代多核系统上,为什么操作系统不让用户决定哪个核心用于哪个应用程序?](https://linux22.com/image/1382031/%E5%9C%A8%E7%8E%B0%E4%BB%A3%E5%A4%9A%E6%A0%B8%E7%B3%BB%E7%BB%9F%E4%B8%8A%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%B8%8D%E8%AE%A9%E7%94%A8%E6%88%B7%E5%86%B3%E5%AE%9A%E5%93%AA%E4%B8%AA%E6%A0%B8%E5%BF%83%E7%94%A8%E4%BA%8E%E5%93%AA%E4%B8%AA%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
在现代多核系统上,如果用户能够将某个核心分配给某个应用程序,那么效率会不会很低?
答案1
首先,对你的问题的真正回答是,你作为用户为什么要关心这个问题?操作系统的开发是为了以最有效的方式利用提供给它们的资源。除非你有特殊要求,否则你的机器不太可能在自己做这项工作时表现得更好。
话虽如此,我认为大多数操作系统都会为您提供选项。在 Windows 中,您可以打开任务管理器应用程序,选择一个进程,上下文菜单中的选项之一是“设置关联性”。这将允许您选择进程将在哪些核心上运行。
答案2
这是一个很难的问题,每种情况都是不同的。
任何操作系统中的线程/进程调度程序都比您复杂和高效得多,它可以非常快速地对不同的工作负载做出反应。用户不应该知道“我的进程如何调度”背后的所有机制,以及(我个人的注释)这对您来说为什么真的很重要?
您将面临让 3 个核心处于休眠状态的风险,而唯一工作的核心将在您的应用程序中调度 2132121 个线程。
顺便说一句,如果您真的想这样做,您可以在任何操作系统中为每个进程定义“CPU 亲和性”。
在 Windows 中,您可以在“任务管理器”中更改进程可以使用的核心,右键单击进程(而不是应用程序),然后单击“亲和性”。
编辑:我曾经用过它,当时我有一个“非常重要的应用程序”:在一台超载的服务器上,该应用程序必须每隔几分钟(当客户要求时)以高优先级运行一次。我们强制操作系统将两个核心(总共超过 8 个核心)专门分配给该应用程序。我们得到了结果,但 90% 的时间里两个核心处于休眠状态。