据我所知,每个虚拟机管理程序中的虚拟机都可以使用其他虚拟CPU来调度其他并行执行线程。
正是物理机和虚拟机之间的抽象层使它无法按照您的描述方式工作。VM不知道物理机有多少个内核。VM无法“看到”物理计算机上的物理CPU(或核心)。系统管理程序为VM提供了多少个虚拟CPU,来宾操作系统使用这些虚拟CPU来调度其他并发线程...系统管理程序交付给虚拟机的虚拟CPU的总数甚至可以超过物理CPU /机器中的核心。
换句话说,虚拟机在分配了单个vCPU时,将其线程安排为好像只有一个CPU。底层物理计算机中有多少个内核无关紧要。(尽管值得注意的是,物理机可能会在一个物理核心上为一个线程量子或时间片安排一个VM线程,然后在下一次计划运行时在另一个物理核心上运行它。虚拟机具有不过,这一切都没有发生。它只知道一次只能调度一个线程,一个线程又一个线程,因为它只有一个虚拟CPU。)
并且让我们在这里非常清楚我们的条款。您将vCPU或虚拟CPU分配给VM,而不是“核心”。内核(假设内核是指共享一个物理套接字的物理处理单元)不等于vCPU。它们之间有一层抽象。如果虚拟机仅分配了1个vCPU,则它只能调度一次运行一个线程。这就是为您的VM分配2个-4个虚拟CPU来使其运行更快的原因-因为它现在可以调度多个线程同时运行。
但是,这里肯定有一条收益递减的法则,因为过多的虚拟CPU会在同步等事务中产生越来越高的开销成本。
Hyper-V和VMware虚拟机管理程序调度虚拟机线程执行的方式之间略有不同,并且它们在物理资源“超额订购”方面的方法也有所不同,但这是一个很好的通用概念。