Multiprocesamiento en Mac OS X

2

¿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?

Jason
fuente

Respuestas:

3

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.

Ian C.
fuente
Ian, muchas gracias por tu aporte. ¿Crees que habría alguna ventaja sobre la elección de un cuadrante con un reloj inferior en lugar de un i7 dual con alta velocidad para tareas como el desarrollo web? (cambio entre el tiempo de ejecución de Ruby, el servidor de aplicaciones web, las pruebas, el IDE basado en Java, varios browers cargados todos al mismo tiempo)
Jason
Personalmente tomaría más núcleos a una velocidad de reloj más alta. Esas tareas generalmente no hacen un uso intensivo de la CPU, por lo que ser capaz de ejecutar más subprocesos simultáneos sería una ventaja mayor que poder ejecutar uno o dos subprocesos un poco más rápido.
Ian C.
Respuesta aceptada. Solo para aclarar, OS X puede permitir que estas aplicaciones se ejecuten en los 4 núcleos, incluso si estas tareas (Ruby, etc.) no están codificadas como aplicaciones de múltiples subprocesos. Sigo leyendo que, a menos que las aplicaciones estén programadas como aplicaciones de subprocesos múltiples, no tiene sentido tener los núcleos adicionales. Por eso vuelvo a preguntar. :)
Jason
1
@Jason absolutamente. Desde el punto de vista del sistema operativo, ve muchos, muchos hilos de todos los programas diferentes. Y los programará todos, en paralelo si es posible. Por lo tanto, el subproceso de Ruby y el subproceso de Apache y los subprocesos IDE de Eclipse podrían ejecutarse simultáneamente.
Ian C.
1

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.

Dustin
fuente
Ah, pero esta es la suposición de que estoy tratando de verificar. Hasta ahora es difícil encontrar datos que respalden esto.
Jason
Puedo explicarlo un poco: cuando el sistema operativo programa un subproceso, no hay ninguna garantía de que se ejecute en el mismo núcleo cada vez (a menos que el subproceso se bloquee en un procesador). Por lo tanto, una aplicación de un solo subproceso se ejecutará en cualquier núcleo disponible cuando el sistema operativo determine que es el momento de volver a ejecutar ese subproceso de la aplicación. ¿Tener sentido?
Ian C.
Déjame ser aburrido y hacer una última consulta. ¿Cuál sería la razón técnica por la que una aplicación como un juego en 3D funcionaría con menos eficiencia en un quad que en un doble núcleo? Veo esa declaración una y otra vez, pero sin ninguna razón técnica para respaldarla.
Jason
1
@Jason Mi conjetura es que el juego almacena una gran cantidad de datos que realiza cálculos para generar el siguiente fotograma. Si el subproceso se ejecuta en un núcleo diferente al de la última vez, existe una mayor probabilidad de que los datos no estén en el caché y tomen más tiempo recuperarlos. Además, creo que la mayoría de los lugares que afirman que hay más procesadores no tienen valor a menos que la aplicación los admita, se basan en el supuesto de que la mayoría de los procesos requieren poco o ningún tiempo de procesador cuando no se utilizan activamente.
ughoavgfhw
@jason si un programa está vinculado a la CPU y no tiene múltiples subprocesos, entonces un sistema de múltiples núcleos o múltiples CPU no ayudará mucho al programa, es mejor que tenga una CPU más rápida que con más CPU. Aunque en verdad, en estos días, puede tener tanto el núcleo rápido como el multi-core sin romper el banco.
Ian C.