Programación Concurrente y distribuida Modelo Concurrente

Transcripción

Programación Concurrente y distribuida Modelo Concurrente
Working Hypothesis
Programación Concurrente y distribuida
Modelo Concurrente declarativo
Camilo Rueda
1 Universidad
1
Javeriana-Cali
PUJ 2008
Working Hypothesis
Oz
Modelo semántico del KL
Entorno:
E : Id → Var
Store de asignación única:
σ
Instrucción semántica: una instrucción y su entorno
(< s >, E )
Estado de ejecución: una pila de instrucciones y su store
(ST , σ)
computación: secuencia de estados
(ST0 , σ0 ) → (ST1 , σ1 ) . . .
Working Hypothesis
El Entorno
Oz
Working Hypothesis
Oz
Pila de ST semánticos
(STn , En )
......
......
(ST2 , E2 )
(ST1 , E1 )
Working Hypothesis
Oz
Ejecución de un programa
Estado inicial:
([(< s >, ∅)], ∅)
composición secuencial: (< s >1 < s >2 , E )
push (< s >1 , E )
push (< s >2 , E )
variable local : (local < x > in < s > end , E )
E 0 = E + {< x >→ x}
push (< s >, E 0 )
Working Hypothesis
Oz
Ejecución de un programa (cont)
encadenar variables: (< x >1 =< x >2 , E )
ligar en el store E (< x >1 ) y E (< x >2 )
Los valores procedimentales son clausuras:
variables globales: < z >1 , . . . , < z >k
CE = E |< z >1 , . . . , < z >k
(proc {$ < y >1 < y >2 < y >n } < s > end , CE )
condicional: (if < x > then < s >1 else < s >2 end , E )
si E (< x >) no es booleano, error
si E (< x >) = true, push (< s >1 , E )
si E (< x >) = false, push (< s >2 , E )
si E (< x >) no está determinado, la ejecución se suspende
Working Hypothesis
Oz
Ejecución de un programa (cont)
llamar procedimiento:
({< x > < y >1 , < y >2 , . . . < y >n }, E )
si E (< x >) no es procedimiento o número de argumentos no
concuerda, error
si E (< x >) =
(proc {$ < z >1 < z >2 < z >n } < s > end , CE )
agregue a la pila:
(< s >,
CE + {< z >1 → E (< y >1 ) . . . < z >n → E (< y >n )})
si E (< x >) no está determinado, la ejecución se suspende
Working Hypothesis
Oz
Ejecución de un programa (cont)
patrones:
(case < x > of
< lit > (< feat >1 :< x >1 . . . < feat >n :< x >n )
then < s >1 else < s >2 end , E )
si etiqueta de E (< x >) es < lit > y su aridad concuerda,
agregue a la pila,
(< s >1 , E + {< x >1 → E (< x >). < feat >1 , . . . , < x >n →
E (< x >). < feat >n })
de lo contrario, agregue (< s >2 , E )
si E (< x >) no está determinado, la ejecución se suspende
Working Hypothesis
Oz
Algunos programas declarativos
(archivo declarat1.oz)
Working Hypothesis
Oz
Concurrencia declarativa
En el modelo declarativo + concurrencia:
El resultado del programa es el mismo. La concurrencia no
cambia la semántica
Para qué Concurrencia entonces?:
Los programas pueden calcular incrementalmente
Ej: Leer datos incrementalmente de una conexión en la red
Nociones:
Programación con hilos
Programación dirigida por demanda
Working Hypothesis
Oz
Concurrencia declarativa: equivalencia
Los programas pueden no terminar
o terminar parcialmente
equivalencia de resultados:
cualquier ejecución conduce a store con restricciones equivalentes
X = pepe(Y W ) Y = Z
X = pepe(Z W ) Y = Z
Working Hypothesis
Oz
El lenguaje de núcleo
< s >::= skip
| < s1 > < s2 >
| local x in s end
| x1 = x2
|x = v
|if x then s1 else s2 end
| case x of
< pattern > then s1 else s2 end
|{x y1 ...yn }
| thread < s > end
stmt vacı́o
secuencia
creación de var.
Var-var binding
creacón de valor
Condicional
Pattern matching
applicacion de procedimiento
creacion de un hilo
Working Hypothesis
Oz
No determinismo declarativo
Para mantener declaratividad: No puede existir no
determinismo observable
thread X = 1 end
thread Y = 2 end
thread X = Y end
Atrapar la excepción por falla permitirı́a observar el no
determinismo
Working Hypothesis
Oz
Modelo de ejecución
(MST0 , σ0 ) → (MST1 , σ1 ) → ...
Cada MST representa un multiconjunto de stack de ejecución
({ST } ⊕ MST 0 , σ) → ({ST 0 ⊕ MST 0 , σ 0 )}
({[(thread s end, E )] + ST 0 } ⊕ MST 0 , σ) →
({[(s, E)]}⊕
{ST 0 } ⊕ MST 0 , σ)
Working Hypothesis
Oz
Hilos
Creación de un hilo: thread < s > end
Los hilos:
operan de manera independiente
ejecutan en el momento en que sus instrucciones puedan
hacerlo
interactuan ligando variables en el store.
Working Hypothesis
Oz
Hilos: scheduler
debe ser justo
en Mozart: round robin scheduling
cada hilo tiene un máximo tiempo de actividad (“time slice”)
hay “preemption”: después del tiempo máximo, se detiene el
hilo y se pasa a otro.
los hilos pueden tener prioridades (alta,media,baja)
{Thread.setThisPriority P}
Working Hypothesis
Oz
Hilos vs Procesos
Concurrencia de procesos es por competencia
Concurrencia de hilos es por colaboración
Muchos hilos corren en un proceso
Working Hypothesis
Oz
Hilos: modelo tı́pico
Productor ↔Consumidor
Lo que se produce se guarda en una lista infinita: a|b| . . . |R
El consumidor consume apenas el productor produce
Mecanismo de programación: streams (flujos)
Working Hypothesis
Programación de streams
Varios procesos independientes:
Enumerar
Transformar (“transducir”)
Filtrar
Acumular
Oz
Working Hypothesis
Oz
Sincronización
Sincronización de barrera
Programación dirigida por datos
Programación bajo demanda (“lazy”)

Documentos relacionados