miércoles, 20 de mayo de 2009

Ejemplo concurrencia

Este es un ejemplo de declaración de procesos en el lenguaje Pascal-FC.

La concurrencia puede ser pesada (procesos) o ligera (hilos). En el primer caso, un proceso es una entidad que, en los sistemas multitarea, conforma una ejecución concreta de programa, mientras que en el segundo, un hilo es una secuencia de control dentro de un proceso ejecutando sus instrucciones independientemente.

Como podremos comprobar, en los ejemplos se omite cualquier referencia a dicho lenguaje y se abordan los ejemplos directamente. La idea no es aprender Pascal-FC, sino aprender más sobre la programación concurrente.

El ejemplo es un "Hola Mundo" un tanto especial:

program declaraprocesos;
(* las siguientes instrucciones declaran los procesos, que en Pascal-FC van en la zona de declaración de tipos *)
process Hola;
var i: integer;
begin
for i:= 1 to 10 do
writeln('Hola')
end;
process Mundo;
var i: integer;
begin
for i:= 1 to 10 do
writeln('Mundo')
end;
(* Inicio del programa *)
begin
writeln('esto es en secuencial');
(* dentro de cobegin ... coend tenemos aquellos procesos que se ejecutan de forma concurrente *)
cobegin
Hola;
Mundo;
coend;
writeln('también en secuencial');
end.


Como vemos, tanto el "Hola" como el "Mundo" se imprimirán concurrentemente en pantalla, ya que están en procesos independientes. Un posible resultado es algo así:

esto es en secuencial
Hola
Mundo
Hola
Hola
Mundo
Mundo
Hola
Mundo
Mundo
Mundo
Hola
Mundo
Mundo
Hola
Hola
Hola
Hola
Hola
Mundo
Mundo

también en secuencial

Digo posible resultado ya que, si vuelvo a ejecutar el mismo código puedo obtener un resultado diferente, como por ejemplo

esto es en secuencial

Hola
Mundo
Mundo
Mundo
Hola
Mundo
Mundo
Mundo
Mundo
Hola
Hola
Mundo
Mundo
Mundo
Hola
Hola
Hola
Hola
Hola
Hola

también en secuencial

Podría ejecutar más veces el mismo código sin tener porqué dar el mismo resultado. A esta propiedad se le denomina comportamiento indeterminista de los programas concurrentes, y consiste en que un mismo programa puede dar resultados diferentes cuando se ejecuta repetidamente sobre los mismos datos de entrada.

No hay comentarios:

Publicar un comentario