¿Mac OS X podría distribuir procesos a los distintos núcleos en un procesador Intel i7 Quad Core incluso si las aplicaciones no son multiproceso?
Un hilo es lo que ve el sistema operativo y lo que programa en un núcleo para ejecutarse.
Los programas pueden ser de un solo hilo o de múltiples hilos. Los programas también pueden generar otros programas y comunicarse con ellos a través de técnicas de E / S a nivel de proceso, como tuberías o manejadores de archivos, etc. Pero desde la perspectiva del sistema operativo, estos subprogramas son solo colecciones de subprocesos. Realmente no importa si el programa está generando múltiples subprocesos o si está generando subprocesos; ambos enfoques representan subprocesos a nivel del sistema operativo que el sistema operativo intentará programar y ejecutar de la manera más eficiente posible y posiblemente en paralelo.
Si tiene varios núcleos y los subprocesos de un programa no se bloquean explícitamente en un núcleo, entonces el sistema operativo puede intentar ejecutarlos al mismo tiempo, en paralelo, en todos los núcleos que tiene disponibles en la máquina actual. Si tiene varios programas en ejecución, el sistema operativo programará todos los subprocesos subyacentes en todos los núcleos que tiene disponibles en la máquina actual.
En la práctica, es necesario que se produzca una cierta cantidad de E / S, comunicación entre procesos y entre subprocesos y sincronización, y esto puede hacer que los subprocesos a nivel del sistema operativo bloqueen y eviten que las cosas se ejecuten de forma verdaderamente paralela todo el tiempo. Por ejemplo: dos subprocesos en un programa de subprocesos múltiples pueden estar extrayendo valores de una pila compartida para realizar algún trabajo, por lo que el acceso a la pila debe coordinarse para garantizar que todo sea seguro para subprocesos y eso significa que solo puede saltar un subproceso La estructura de datos de la pila en el momento. Hay un cuello de botella en el diseño del programa que limita el paralelismo de hilos a uno aquí y el sistema operativo no puede ayudar con eso.
Lo mismo ocurre con los programas que generan subprocesos. Es posible que haya problemas de E / S o de sincronización entre procesos que impidan que todos los subprocesos generados se ejecuten en paralelo todo el tiempo.
Si la aplicación en sí no es multiproceso, entonces permanecerá en un solo núcleo. Si tiene una serie de aplicaciones de un solo subproceso que se están ejecutando, es razonable suponer que OS X las distribuirá entre los núcleos de manera adecuada.
fuente