apuntes:concurrencia
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
apuntes:concurrencia [2023/05/28 11:11] – [¿Qué son los hilos?] Santiago Faci | apuntes:concurrencia [2023/05/28 11:44] – [Streams paralelos] Santiago Faci | ||
---|---|---|---|
Line 36: | Line 36: | ||
Es la programación de aplicaciones en las que las tareas a ejecutar se reparten entre varios equipos diferentes (conectados en red, a los que llamaremos nodos). Juntos, estos equipos, forman lo que se conoce como un Sistema Distribuido, | Es la programación de aplicaciones en las que las tareas a ejecutar se reparten entre varios equipos diferentes (conectados en red, a los que llamaremos nodos). Juntos, estos equipos, forman lo que se conoce como un Sistema Distribuido, | ||
- | \begin{figure}[h!] | + | <figure> |
- | | + | {{ concurrencia.jpg |
- | \includegraphics[scale=0.8]{partes/ | + | <caption> |
- | \caption{Programación concurrente/paralela} | + | |
- | \end{figure} | + | |
- | \begin{figure}[h!] | + | <figure> |
- | \centering | + | {{ distribuida.jpg |
- | | + | <caption>Programación distribuida</ |
- | \caption{Programación distribuida} | + | |
- | \end{figure} | + | |
==== ¿Qué son los hilos? ==== | ==== ¿Qué son los hilos? ==== | ||
Line 58: | Line 54: | ||
=== Estados de un hilo === | === Estados de un hilo === | ||
< | < | ||
- | {{ estados.hilos.png }} | + | {{ estados_hilo.png }} |
< | < | ||
Line 512: | Line 508: | ||
. . . | . . . | ||
</ | </ | ||
+ | |||
+ | ==== CompletableFuture ==== | ||
+ | |||
+ | Proporciona una API más completa que la que hay para la clase //Future//. | ||
+ | |||
+ | * Lanzar una tarea en segundo plano de forma asíncrona y ejecutar un método al finalizar ésta (a través de la llamada a un método callback) | ||
+ | |||
+ | <code java> | ||
+ | CompletableFuture.runAsync(() -> doSomething()) | ||
+ | .whenComplete((string, | ||
+ | </ | ||
+ | |||
+ | * Lanzar una tarea y ejecutar algo cuando ésta termina: | ||
+ | |||
+ | <code java> | ||
+ | private String doSomethingAndReturnResult() { | ||
+ | return " | ||
+ | } | ||
+ | |||
+ | CompletableFuture.supplyAsync(() -> doSomethingAndReturnResult()) | ||
+ | .thenAccept(System.out:: | ||
+ | .whenComplete((nothing, | ||
+ | </ | ||
+ | |||
==== CountDownLatch ==== | ==== CountDownLatch ==== | ||
Line 616: | Line 636: | ||
==== Streams paralelos ==== | ==== Streams paralelos ==== | ||
+ | |||
+ | La ejecución en paralelo significa que se ejecutan fragmentos de código de una aplicación al mismo tiempo. | ||
+ | |||
+ | Hay que tener en cuenta que, en determinadas circunstancias, | ||
+ | |||
+ | En otras circustancias puede interesar puesto que la aplicación aprovecha mucho más los recursos de la máquina al forzar a ésta a ejecutar algunas operaciones de forma simultánea | ||
+ | |||
+ | < | ||
+ | {{ parallel-sequential.png }} | ||
+ | < | ||
+ | |||
+ | En los streams paralelos, se procesan los elementos de forma paralela por segmentos | ||
+ | |||
+ | <code java> | ||
+ | List< | ||
+ | // TODO Poblar la lista de ciudades | ||
+ | cities.parallelStream() | ||
+ | .forEach(System.out:: | ||
+ | </ | ||
+ | |||
+ | Puede mejorar el rendimiento en algunos casos, ya que permite que la aplicación realice algunos cálculos (matemáticos en este caso) de forma paralela, aprovechando mucho más los recursos de la máquina | ||
+ | |||
+ | <code java> | ||
+ | long count = Stream.iterate(0, | ||
+ | .limit(500000) | ||
+ | .parallel() | ||
+ | .filter(Main:: | ||
+ | .count(); | ||
+ | System.out.println(" | ||
+ | </ | ||
==== Locks ==== | ==== Locks ==== |
apuntes/concurrencia.txt · Last modified: 2023/05/28 23:59 by Santiago Faci