diff options
author | [Ernesto] <[ernesto.p@itmexicali.edu.mx]> | 2018-09-19 13:12:27 -0700 |
---|---|---|
committer | [Ernesto] <[ernesto.p@itmexicali.edu.mx]> | 2018-09-19 13:12:27 -0700 |
commit | 368c855ed6f154b5f37edf1d1d098440c189a534 (patch) | |
tree | 7756506d36a9ae3d98711c32791852b586c96d2e | |
parent | d875cbabe402c3355d5bd49801adcc4f99edf9a8 (diff) |
added part 4 Concurrency
-rw-r--r-- | es-es/erlang-es.html.markdown | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/es-es/erlang-es.html.markdown b/es-es/erlang-es.html.markdown index 11c83562..e375cc04 100644 --- a/es-es/erlang-es.html.markdown +++ b/es-es/erlang-es.html.markdown @@ -228,3 +228,36 @@ generate_exception (5) -> erlang: error (a).** - El otro es encerrar la llamada en una expresión **`catch`**. Cuando atrapas un de excepción, se convierte en una tupla que describe el error. >**catcher (N) -> catch generate_exception (N).** + +## 4. Concurrencia + +- Erlang se basa en el modelo de actor para concurrencia. Todo lo que necesitamos para escribir de programas simultáneos en Erlang son tres primitivos: procesos de desove, de envío de mensajes y recepción de mensajes. + +- Para comenzar un nuevo proceso, usamos la función **`spawn`**, que toma una función como argumento. + +>**F = diversión () -> 2 + 2 final. % #Fun <erl_eval.20.67289768> +spawn (F). % <0.44.0>** + +- **`spawn`** devuelve un pid (identificador de proceso); puedes usar este pid para enviar de mensajes al proceso. Para pasar mensajes, usamos el operador **`!`**. + +- Para que todo esto sea útil, debemos poder recibir mensajes. Esto es logrado con el mecanismo **`receive`**: + +>**-module (calcular Geometría). +-compile (export_all). +calculateArea () -> + recibir + {rectángulo, W, H} -> + W * H; + {circle, R} -> + 3.14 * R * R; + _ -> + io: format ("Solo podemos calcular el área de rectángulos o círculos") + end.** + +- Compile el módulo y cree un proceso que evalúe **`calculateArea`** en cáscara. +>**c (calcular Geometría). +CalculateArea = spawn (calcular Geometría, calcular Área, []). +CalculateArea! {círculo, 2}. % 12.56000000000000049738** + +- El shell también es un proceso; puedes usar **`self`** para obtener el pid actual. +**self(). % <0.41.0>** |