Me gustaría experimentar con subprocesos en un procesador multinúcleo, por ejemplo, para crear un programa que use dos subprocesos diferentes ejecutados por dos núcleos de procesador diferentes.
Sin embargo, no me queda claro en qué nivel se asignan los hilos 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 hilos 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 varios núcleos, el sistema operativo automáticamente intenta asignar / programar diferentes subprocesos en diferentes núcleos.
- La asignación de hilos es administrada por la implementación del lenguaje de programación. La asignación de hilos a diferentes núcleos requiere llamadas especiales del sistema, pero las bibliotecas de hilos estándar del lenguaje de programación manejan esto automáticamente cuando uso la implementación de hilos 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 asignar diferentes subprocesos a diferentes núcleos utilizando, por ejemplo, funciones de biblioteca.
Para hacer la pregunta más específica, imagine que he escrito mi aplicación multiproceso en Java o C ++ en Windows o Linux. ¿Mi aplicación verá y usará mágicamente múltiples núcleos cuando se ejecute en un procesador multinúcleo (porque todo es administrado por el sistema operativo o por la biblioteca de hilos estándar), o tengo que modificar mi código para conocer los múltiples núcleos? ?
fuente
Una vez tuve un gran entorno SGI IRIX. Solo por el gusto de hacerlo, escribí un pequeño programa Java multiproceso (que no hizo más que consumir ciclos de CPU) y creé 12 hilos en él. El trabajo abarcó 12 CPU en la arquitectura NUMA. Tal vez buscaré el programa y lo ejecutaré en los Dell R910s y comprobaré ...
fuente