5. El código es portable
entre arquitecturas
La gestión de la
memoria es automática
jueves 21 de enero de 2010
6. public class Counter
{
private int value = 0;
public synchronized void incr(){
value = value + 1;
}
}
....
Counter counter = new Counter();
counter.incr();
jueves 21 de enero de 2010
7. public class Counter
{
private int value = 0;
public synchronized void incr(){
value = value + 1;
}
}
....
Counter counter = new Counter();
counter.incr();
jueves 21 de enero de 2010
9. plinq Parallel LINQ
Language Integrated Query
Paralelismo de datos
Construcciones declarativas
jueves 21 de enero de 2010
10. plinq
IEnumerable<Factura> facturas = ...
var query = from f in facturas
where f.Ciudad == ...
select f;
var suma = query.Sum(f => f.importe);
jueves 21 de enero de 2010
11. plinq
IEnumerable<Factura> facturas = ...
var query = from f in facturas
where f.Ciudad == ...
select f;
var suma = query.Sum(f => f.importe);
facturas.Where(f => f.Ciudad == ...).Select(f => f);
jueves 21 de enero de 2010
12. plinq
IEnumerable<Factura> facturas = ...
var query = from f in facturas
where f.Ciudad == ...
select f;
var suma = query.Sum(f => f.importe);
λ λ
facturas.Where(f => f.Ciudad == ...).Select(f => f);
jueves 21 de enero de 2010
13. plinq
IEnumerable<Factura> facturas = ...
var query = from f in facturas
where f.Ciudad == ...
select f;
var suma = query.Sum(f => f.importe);
λ λ
facturas.Where(f => f.Ciudad == ...).Select(f => f);
jueves 21 de enero de 2010
14. plinq
IEnumerable<Factura> facturas = ...
var query = from f in facturas
where f.Ciudad == ...
select f;
var suma = query.Sum(f => f.importe);
λ λ
facturas.Where(f => f.Ciudad == ...).Select(f => f);
jueves 21 de enero de 2010
15. plinq
var q = from f in facturas.AsParalell()
jueves 21 de enero de 2010
16. plinq
var q = from f in facturas.AsParalell()
jueves 21 de enero de 2010
17. plinq
var q = from f in facturas.AsParalell()
void PMatMul(...) {
Parallel.For(0, size, (i) => {
for (int j = 0; j < size; j++) {
result[i, j] = 0;
for (int k = 0; k < size; k++) {
result[i, j] += m1[i, k] * m2[k, j];
}
}
});
}
jueves 21 de enero de 2010
18. Actores
(paso de mensajes)
jueves 21 de enero de 2010
19. scala
var actor1 = actor {
receive {
case x : String =>
println(x)
}
}
...
actor1 ! "hello world!"
jueves 21 de enero de 2010
20. scala
var actor1 = actor {
receive {
case x : String =>
println(x)
}
}
...
actor1 ! "hello world!"
jueves 21 de enero de 2010
21. scala
var actor1 = actor {
loop {
react {
case s : String =>
println(s)
}
}
}
...
actor1 ! "hello world!"
jueves 21 de enero de 2010
22. scala
var actor1 = actor {
loop {
react {
case s : String =>
println(s)
}
}
}
...
actor1 ! "hello world!"
jueves 21 de enero de 2010
23. Clojure
Memoria Transaccional
¿por qué bloquear?
jueves 21 de enero de 2010
24. cloju
re
!"#$$%&'&()$*+,-
!"#$$%&.$,)#&/0(
1,2#"34&567$8-,&94&9::;
<7+",7&<2-,,"4&=)7>"?@$,A
! !
(def counter(ref 0))
(dosync (alter counter inc))
jueves 21 de enero de 2010
25. cloju
re
!"#$$%&'&()$*+,-
!"#$$%&.$,)#&/0(
1,2#"34&567$8-,&94&9::;
<7+",7&<2-,,"4&=)7>"?@$,A
! !
(def counter(ref 0))
(dosync (alter counter inc))
jueves 21 de enero de 2010
32. Conclusiones
hilos tradicionales
no componen
jueves 21 de enero de 2010
33. Conclusiones
hilos tradicionales plinq
no componen uso declarativo
jueves 21 de enero de 2010
34. Conclusiones
hilos tradicionales plinq
no componen uso declarativo
actores, mensajes
memoria distribuida
jueves 21 de enero de 2010
35. Conclusiones
hilos tradicionales plinq
no componen uso declarativo
Clojure
actores, mensajes stm, sin bloqueos
memoria distribuida memoria compartida
jueves 21 de enero de 2010