2010-11-11 13 views
12

¿Son las dos cosas lo mismo? Mirando exactamente qué medios concurrentes o paralelos en geometría, definitivamente diría que no:¿La programación simultánea es igual a la programación en paralelo?

En geometría, se dice que dos o más líneas son concurrentes si se cruzan en un solo punto.

y

Dos líneas en un plano que no se cruzan o se encuentran se llaman paralelos líneas.

Nuevamente, en la programación, ¿tienen el mismo significado? ¿Si es así por qué?

Gracias

+0

+1 Excelente pregunta. ¿Podría ser mejor existir en http://programmers.stackexchange.com/? 'Programadores: Stack Exchange es para programadores expertos que estén interesados ​​en discusiones subjetivas sobre el desarrollo de software. –

+0

@JohnK No creo que estas definiciones sean subjetivas. –

Respuesta

6

Acepto que el vocabulario de geometría está en conflicto. Piense en las vías del tren en su lugar: dos trenes que están en pistas paralelas pueden funcionar de forma independiente y simultánea con poca o ninguna interacción. Estos trenes se ejecutan concurrentemente, en paralelo.

La dificultad de uso básico es que "concurrente" puede significar "al mismo tiempo" (con los trenes o el código) o "en el mismo lugar" (con las líneas geométricas). Para muchos propósitos prácticos (trenes, recursos de hilos) estas dos nociones están directamente en conflicto.

El lenguaje natural es supone ser tonto, ambiguo y confuso. Pero somos programadores. Podemos refugiarnos en la claridad, simplicidad y elegancia de nuestros lenguajes de programación formales. Como perl.

+2

+1 por estar bien pensado, pero la última frase seguramente debe ser una broma? –

3

De Wikipedia:

computación concurrente es una forma de la computación en el que los programas están diseñados como colecciones de interactuar procesos computacionales que pueden ser ejecutar en paralelo.

Básicamente, los programas se pueden escribir como programas simultáneos si están formados por procesos de interacción más pequeños. La programación paralela en realidad está haciendo estos procesos al mismo tiempo.

Supongo que la programación simultánea es realmente un estilo que se presta a procesos que se ejecutan en paralelo para mejorar el rendimiento.

2

No, definitivamente concurrente es diferente de paralelo. aquí es exactamente cómo.

La concurrencia se refiere al intercambio de recursos en el mismo marco de tiempo. Como ejemplo, varios procesos pueden compartir la misma CPU o compartir memoria o un dispositivo de E/S.

Ahora, por definición, dos procesos son concurrentes si solo si el segundo comienza la ejecución antes de que el primero haya finalizado (en la misma CPU). Si los dos procesos se ejecutan en la misma CPU, digamos por ahora, de núcleo único, los procesos son concurrentes pero no paralelos: en este caso, el paralelismo es solo virtual y se refiere al tiempo compartido del sistema operativo. El sistema operativo parece estar ejecutando varios procesos simultáneamente. Si solo hay una CPU de un solo núcleo, solo se puede ejecutar una instrucción de un solo proceso en un momento determinado.Dado que la escala de tiempo humana es miles de millones de veces más lenta que la de las computadoras modernas, el sistema operativo puede cambiar rápidamente entre los procesos para dar la apariencia de varios procesos que se ejecutan al mismo tiempo.

Si en su lugar ejecuta los dos procesos en dos CPU diferentes, los procesos son paralelos: no se comparte en el mismo marco de tiempo, porque cada proceso se ejecuta en su propia CPU. El paralelismo en este caso no es virtual sino físico. Vale la pena señalar aquí que ejecutar en diferentes núcleos de la misma CPU multinúcleo aún no se puede clasificar como completamente paralelo, porque los procesos compartirán los mismos cachés de CPU e incluso competirán por ellos.

Cuestiones relacionadas