Me gustaría experimentar con subprocesos en un procesador de múltiples núcleos, por ejemplo. para crear un programa que utiliza dos subprocesos diferentes que se ejecutan mediante dos núcleos de procesador diferentes.
Sin embargo, no está claro a qué nivel se asignan los subprocesos a los diferentes núcleos. Puedo imaginar los siguientes escenarios (dependiendo del sistema operativo y la implementación del lenguaje de programación):
- La asignación de subprocesos es administrada por el sistema operativo. Los subprocesos se crean mediante llamadas al sistema operativo y, si el proceso se ejecuta en un procesador de múltiples núcleos, el sistema operativo automáticamente trata de asignar / programar diferentes subprocesos en diferentes núcleos.
- La asignación de subprocesos se gestiona mediante la implementación del lenguaje de programación. La asignación de subprocesos a un núcleo diferente requiere llamadas especiales al sistema, pero las bibliotecas de subprocesos estándar del lenguaje de programación manejan esto automáticamente cuando uso la implementación de subprocesos estándar para ese lenguaje.
- La asignación de hilos debe programarse explícitamente. En mi programa, tengo que escribir código explícito para detectar cuántos núcleos están disponibles y para asignar diferentes hilos a diferentes núcleos utilizando, por ejemplo, funciones de biblioteca.
Para que la pregunta sea más específica, imagine que he escrito mi aplicación de subprocesos múltiples en Java o C ++ en Windows o Linux. ¿Mi aplicación verá y utilizará múltiples núcleos de forma mágica cuando se ejecute en un procesador de múltiples núcleos (porque todo está gestionado por el sistema operativo o por la biblioteca de hilos estándar), o tengo que modificar mi código para tener en cuenta los múltiples núcleos? ?