2009-06-05 7 views
46

estoy confundido acerca de la noción de "chispa"¿Qué es una "chispa" en Haskell

Es un hilo en Haskell? ¿O la acción de engendrar es un hilo nuevo?

Gracias a todo el mundo:

Entonces, para resumir, las chispas no están hilo, pero más de la unidad de cálculo (tareas para ponerlo en términos de C#/Java). Entonces es la forma de Haskell de implementar el paralelismo de tareas.

Respuesta

32

Ver A Gentle Introduction to Glasgow Parallel Haskell.

Paralelismo se introduce en GPH por el par combinador, que toma dos argumentos que son para ser evaluados en paralelo. La expresión p `par` e (aquí usamos la notación de operador infijo de Haskell) tiene el mismo valor que e, y no es estricta en su primer argumento, es decir, bottom `par` e tiene el valor e. (bottom denota un cálculo que no termina o falla). Su comportamiento dinámico es indicar que p podría evaluarse mediante una nueva secuencia paralela, con la evaluación continua de la cadena padre de e. Decimos que p ha sido provocado, y posteriormente se puede crear un hilo para evaluar si un procesador queda inactivo. Dado que el hilo no se crea necesariamente, p es similar a un futuro vago.

[énfasis en el original]

+1

Según lo leí, una "chispa" no es tanto un hilo como un cálculo que puede ejecutarse en un hilo. El tiempo de ejecución puede tener un límite de límite fijo en los hilos que giran y evalúan las chispas. – ephemient

+1

Esto no es correcto. Las chispas no son hilos. GHC admite chispas, que son cálculos no evaluados en una cola, Haskell (subprocesos ligeros) y subprocesos del sistema operativo. –

87

Sparks no son hilos de rosca. forkIO presenta los hilos Haskell (que se relacionan con menos hilos reales del sistema operativo). Las chispas crean entradas en las colas de trabajos para cada hilo, desde donde llevarán las tareas a ejecutar si el hilo queda inactivo.

Como resultado, los chispazos son muy baratos (puede tener miles de millones en un programa, mientras que probablemente no tendrá más de un millón de subprocesos Haskell y menos de una docena de subprocesos OS en media docena de núcleos).

Piense en ello como esto:

spark model

+0

¿Cogió la imagen desde aquí: http://expcodes.com/125624? Alguna atribución puede ser agradable. –

+37

@phresnel este es un trabajo original hecho por mí, creado para esta pregunta, usando inkscape. su enlace realmente usa mi trabajo sin atribución, ya que puede decir que miro la fecha del contenido. –

+4

Veo; En general, me preguntaba por qué el contenido vinculado parece ser de mayor resolución.Mi falla al no mirar la fecha, gracias por la aclaración :) –

3

Si he entendido bien, una chispa es una entrada en una cola de trabajos que requieren el trabajo. Un grupo de subprocesos toma entradas de esta cola y las ejecuta. Normalmente, hay un hilo por procesador físico, por lo que este esquema maximiza el rendimiento y minimiza el cambio de contexto del hilo.

0

Parece que es similar a una "tarea" en Intel Threading Building Blocks.

+0

Daría un +1, pero siento que necesita un poco más para ser una respuesta, ya que es más como un comentario. Agregue un par de enlaces y analice cómo los conceptos son similares, centrándose en ayudarnos a comprender Sparks específicamente. – derekv

Cuestiones relacionadas