Las máquinas virtuales en cada hipervisor que conozco pueden usar CPU virtuales adicionales en las que programar subprocesos concurrentes adicionales de ejecución.
Es exactamente esa capa de abstracción entre la máquina física y la máquina virtual que hace que no funcione de la manera que usted describe. La máquina virtual no sabe cuántos núcleos tiene la máquina física. La VM no "ve" las CPU físicas (o núcleos) en la máquina física. El hipervisor le da a la VM cuántas CPU virtuales, y el sistema operativo invitado usa esas CPU virtuales para programar subprocesos concurrentes adicionales ... El número total de CPU virtuales que el hipervisor entrega a las máquinas virtuales puede incluso superar el número de CPU físicas / núcleos en la máquina.
Dicho de otra manera, una máquina virtual, cuando se le asigna una única vCPU, programa sus subprocesos como si solo tuviera una CPU. No importa cuántos núcleos hay en la máquina física subyacente. (Aunque vale la pena señalar que la máquina física puede programar que un subproceso VM en un núcleo físico para una cantidad de subproceso, o segmento de tiempo, y luego ejecutarlo en un núcleo físico diferente la próxima vez que esté programado para ejecutarse. La máquina virtual tiene Sin embargo, no tengo idea de que eso suceda. Todo lo que sabe es que solo puede programar un hilo a la vez, uno tras otro, porque solo tiene una CPU virtual).
Y seamos muy claros acerca de nuestros términos aquí. Usted asigna vCPU o CPU virtuales a máquinas virtuales, no "núcleos". Los núcleos (por los cuales supongo que se refiere a unidades de procesamiento físico que comparten un solo socket físico) no son iguales a las vCPU. Hay una capa de abstracción entre ellos. Si una VM solo tiene 1 vCPU asignada, solo puede programar un subproceso para que se ejecute a la vez. Es por eso que su VM se ejecuta más rápido con 2 -4 CPU virtuales asignadas, porque ahora puede programar más de un hilo para que se ejecute simultáneamente.
Sin embargo, definitivamente hay una ley de rendimientos decrecientes aquí, ya que un número excesivo de CPU virtuales incurre en un costo general cada vez mayor en cosas como la sincronización, etc.
Existen ligeras diferencias entre la forma en que los hipervisores Hyper-V y VMware programan subprocesos de máquinas virtuales para su ejecución, y difieren en su enfoque para la "suscripción excesiva" de recursos físicos, pero este es un buen concepto general para comenzar.