2009-04-30 14 views
24

¿Cuál es la diferencia entre el roscado y el paralelismo?Threading vs Parallelism, ¿cómo difieren?

¿Cuál tiene ventaja sobre la otra?

+4

¿En qué se diferencian los automóviles y la conducción? Enhebrar es el acto de usar hilos, el paralelismo es cuando algo se ejecuta en paralelo. La forma más común de hacer que las cosas se ejecuten en paralelo es usar hilos. – jalf

Respuesta

27

Daniel Moth (a former coworker of mine)- Threading/Concurrency vs Parallelism artículo lo explica todo.

Citado:

Para aprovechar múltiples núcleos de nuestro software, en última instancia, hilos tienen que ser utilizados. Debido a este hecho, algunos desarrolladores caen en , la trampa de equiparar el subprocesamiento múltiple con el paralelismo. Eso no es precisa ... Puede haber múltiples hilos en una sola máquina de la base, pero que sólo puede tener paralelismo en una máquina multi core

La prueba rápida: Si en una sola máquina de la base que está utilizando hilos y se tiene perfecto sentido para su escenario, entonces no está "haciendo paralelismo", simplemente está haciendo multihilo.

+3

¡Buen artículo! Puede valer la pena agregar un breve resumen o una cita aquí, para protegerse contra la podredumbre del enlace. –

3

Threading es una tecnología, el paralelismo es un paradigma que puede ser implementado utilizando el roscado (pero podría ser tan fácil de hacer uso de hilos individuales en múltiples procesadores)

1

¿Cómo se define "paralelismo"? Multithreading es una implementación concreta del concepto de ejecución de programa paralelo.

El artículo relacionado con RichardOD parece estar relacionado principalmente con si los hilos se ejecutan en paralelo en una máquina concreta.

Sin embargo, su pregunta parece considerar el subprocesamiento múltiple y el paralelismo como opuestos. ¿Quizás se refiere a programas que usan múltiples procesos en lugar de múltiples subprocesos? Si es así, las diferencias son:

  • Los subprocesos son mucho más baratos de crear que los procesos. Esta es la razón por la cual el uso de hilos en lugar de procesos dio como resultado una aceleración enorme en las aplicaciones web: esto se denominó "FastCGI".
  • Varios hilos en la misma máquina tienen acceso a la memoria compartida. Esto hace que la comunicación entre hilos sea mucho más fácil, pero también muy peligrosa (es fácil crear errores como condiciones de carrera que son muy difíciles de diagnosticar y corregir).
3

Enhebrar generalmente se refiere a tener múltiples procesos trabajando al mismo tiempo en una sola CPU (bueno, de hecho, no creo que lo hagan pero cambian muy rápido entre ellos).

Paralelo es tener múltiples procesos trabajando al mismo tiempo en múltiples CPU.

Ambos tienen sus pros y sus contras en gran medida dependiendo del planificador utilizado por su sistema operativo. Por lo general, el costo de cálculo de crear un hilo es mucho menor que generar un proceso en otra CPU, sin embargo, tener una CPU "completa" para usted aumenta la velocidad general de ese proceso. Pero, de nuevo, si ese proceso necesita comunicarse con otro proceso en otra CPU, debe resolver el problema de IPC (comunicación entre procesos) que podría ser una sobrecarga, de modo que es mejor usar una cadena en la misma CPU.

La mayoría de los sistemas operativos conocen múltiples CPU/Cores y pueden usarlos, pero esto hace que el programador sea bastante complejo.

Si está programando en un lenguaje que usa una VM (máquina virtual), tenga en cuenta que necesitan implementar su propio planificador (si es que lo hace). Python, por ejemplo, usa un GIL, que prácticamente dice que todo lo que se ejecuta en esa máquina virtual permanece en la misma CPU, siempre. Aunque algunos sistemas operativos son capaces de migrar un proceso pesado a otra CPU que no está tan ocupada en este momento, lo que por supuesto significa que todo el proceso debe detenerse mientras lo hace.

Algunos sistemas operativos como DragonFlyBSD adoptan un enfoque totalmente diferente a la programación, entonces lo que en este momento es el enfoque 'estándar'.

Creo que esta respuesta le da suficientes palabras clave para buscar más información :-)

1

Threading es el paralelismo de un hombre pobre.

EDIT: Para ser más precisos:

que rosca no tiene nada que ver con el paralelismo y sabia versa. Enhebrar se trata de hacer sentir que algunos procesos se ejecutan en paralelo. Sin embargo, esto no hace que los procesos a completen TODAS sus acciones sean más rápidas en total.

+1

(-1) A. Cada herramienta tiene su lugar. SEGUNDO.¿Tienes algo para respaldar esto? – DevinB

+0

Acabo de responder la pregunta del tema. ¿Cuál es la pregunta? Así es la respuesta. – Thevs

+0

Para aquellos que desean un debate extenso, comencemos con http://www.prodata.lt/EN/Programming/OPU_computing_model.pdf. – Thevs

4

El paralelismo es una técnica general de usar más de un flujo de instrucciones para completar un cálculo. El aspecto crítico de todas las técnicas paralelas es la comunicación entre flujos para colaborar en una respuesta final.

Threading es una implementación específica de paralelismo. A cada flujo de instrucciones se le asigna su propia pila para mantener un registro de las variables locales y las llamadas a funciones, y se comunica con los otros flujos implícitamente mediante la memoria compartida.

Un ejemplo podría ser tener un hilo simplemente poner en cola las solicitudes de disco y pasarlo a un hilo de trabajo, paralelizando efectivamente el disco y la CPU. El método de tuberías de UNIX tradicional es la de dividir éstas en dos programas completos, decir "gato" y grep en el comando:

cat /var/log/Xorg.0.log | grep "EE" 

que rosca podría reducir posiblemente los costos de comunicación de disco de la copia de E/S del proceso gato al proceso grep

1

Aquí está la mejor respuesta para despejar las dudas de cualquier persona relacionada con el paralelismo y el roscado. [Lo leí en quora y me pareció útil compartirlo con los lectores de SO.]
Los hilos son una construcción de software. Puedo comenzar tantos subprocesos como quiera, incluso en un viejo procesador de un solo núcleo. Por lo tanto, el multi-threading no es necesariamente paralelo: solo es paralelo si el hardware puede soportarlo. Entonces, si tiene múltiples núcleos y/o hyperthreading, su multi-threading se vuelve paralelo. Y en estos días eso es, de hecho, la mayor parte del tiempo.

Concurrencia se trata de actividades que no tienen un orden temporal claro. De nuevo, si el hardware lo admite, se pueden hacer en paralelo, si no, no.

Por lo tanto, tradicionalmente multi-threading es casi sinónimo de concurrencia. Y ambos solo se vuelven paralelos si el hardware lo admite. Incluso entonces puede iniciar muchos más hilos de los que admite el hardware, y le quedan concurrencia.