2011-07-05 20 views
6

Quizás haya alguien con los intereses adecuados que sabrá cómo responder a esto. Básicamente la pregunta es: ¿Cuáles son las diferencias entre el módulo multiprocessing en Python, y el paralelismo en Haskell. Por ejemplo: ¿los hilos creados en Python se asignan a los hilos del sistema operativo? Si es así, ¿qué pasa si hay más hilos que núcleos? ¿Están multiplexados en los hilos del sistema operativo? ¿Quién programa estos hilos? Gracias por toda la información: documentación/ideas muy apreciadas.Haskell vs. Python threading model

+1

El modelo de roscado de GHC Haskell se describe en esta pregunta: http://stackoverflow.com/questions/5847642/haskell-lightweight-threads-overhead-and-use-on-multicores/5849482#5849482 –

Respuesta

7

A diferencia de Python (Ver Eli's answer), el modelo de enhebrado de Haskell es bastante diferente. Usted tiene una diferencia entre la concurrencia (múltiples hilos que manejan diferentes aspectos del programa) y el paralelismo (múltiples hilos solo para acelerar el cálculo). Ambos son manejados por hilos livianos manejados por Haskell RTS. En el segundo caso, uno puede usar primitivas como pseq y par que indican el tiempo de ejecución para hacer el cálculo en otro hilo, si esto le da una ventaja. El tiempo de ejecución lo decide automágicamente.

6

El módulo Python multiprocessing no tiene nada que ver con los hilos. Intenta proporcionar una API similar a threading (que muestra subprocesos) con procesos debajo.

Los subprocesos de Python se asignan a los subprocesos del sistema operativo, y si crea más subprocesos que núcleos sucede exactamente lo mismo que si lo hiciera en C (pthreads, Win API hilos, etc.) - el SO hace malabares con los subprocesos entre núcleos.

Hay mucha información en línea acerca de los hilos de Python, solo Google.

+0

Gracias, Eli: " simplemente Google ". Me preguntaba si podrías ser un poco más específico. Hay demasiada información (y la distribuyo) para que la digiera, de ahí la pregunta. ¿Tal vez me puede ayudar apuntando a la * mejor * documentación? Además, estoy interesado en comparar Python con Haskell, más que con Python. Gracias. –

+0

Cabe señalar que multi-threading en CPython se ve obstaculizado por el [GIL] (http://en.wikipedia.org/wiki/Global_Interpreter_Lock). Por lo tanto, multi-threading bajo (mainstream) Python se utiliza principalmente como un medio caro para la concurrencia (y no tanto para el paralelismo). También hay instalaciones de simultaneidad de terceros, como [greenlets] (http://packages.python.org/greenlet/) que se asemejan un poco más a los microthreads de Haskell en un solo núcleo. – hvr

+0

@hvr: el módulo de "multiprocesamiento" lo dice "de forma efectiva al costado [s] del bloqueo de intérprete global". ¿Te importa expandir esto? Ver http://docs.python.org/library/multiprocessing.html –