Respuesta

25

Cuando se trata de valores puros, el orden de evaluación no importa. Eso es esencialmente lo que hace el paralelismo : Evaluar valores puros en paralelo. A diferencia de los valores puros, el orden suele ser importante para las acciones con efectos secundarios. La ejecución de acciones simultáneamente se llama concurrencia . Como ejemplo, considere las dos acciones putStr "foo" y putStr "bar". Según el orden en que se evalúen esas dos acciones, la salida es "foobar", "barfoo" o cualquier estado intermedio. La salida es indeterminista ya que depende del orden específico de evaluación.

Como otro ejemplo, considere los dos valores sum [1..10] y 5 * 3. Independientemente del orden en que esos dos se evalúan, siempre reducen a los mismos resultados. Este determinism es algo que generalmente solo puede garantizarse con valores puros.

+22

+1; en otras palabras, el paralelismo es una optimización; concurrencia cambia semántica. – ehird

+3

@ehird Sí. Eso es perfectamente lo que traté de transmitir. – fuz

+0

In lang oz: 1 valor de flujo de datos solo puede vincularse una vez 2 El valor de desvinculación del uso del programa debe esperar hasta que se haya vinculado. Entonces, el comportamiento es determinante cuando dos subprocesos usan un mismo valor de flujo de datos. – jiamo

24

La simultaneidad y el paralelismo son dos cosas diferentes.

Concurrencia significa que tiene múltiples hilos que interactúan de manera no determinista. Por ejemplo, es posible que tenga un servidor de chat donde cada cliente se maneja con un hilo. El no determinismo es esencial para el sistema que está tratando de modelar.

Paralelismo se trata de utilizar múltiples hilos para simplemente hacer que su programa se ejecute más rápido. Sin embargo, el resultado final debe ser exactamente el mismo que si ejecuta el algoritmo secuencialmente.

Muchos idiomas no tienen primitivas para el paralelismo, por lo que debe implementarlo utilizando primitivas de simultaneidad como subprocesos y bloqueos. Sin embargo, esto significa que usted, el programador, debe tener cuidado para asegurarse de que no introduzca accidentalmente no determinismo no deseado u otros problemas de concurrencia. Con primitivas explícitas de paralelismo como par y pseq, muchas de estas preocupaciones simplemente desaparecen.

+2

Eso es ... una * realmente * buena explicación. Gracias. –

Cuestiones relacionadas