Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:concurrencia

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
apuntes:concurrencia [2023/05/28 11:15] – [¿Qué son los hilos?] Santiago Faciapuntes:concurrencia [2023/05/28 11:44] – [Streams paralelos] Santiago Faci
Line 508: Line 508:
 . . . . . .
 </code> </code>
 +
 +==== 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, throwable) -> doSomethingWhenFinishFuture());
 +</code>
 +
 +  * Lanzar una tarea y ejecutar algo cuando ésta termina:
 +
 +<code java>
 +private String doSomethingAndReturnResult() {
 +    return "ok";
 +}
 +
 +CompletableFuture.supplyAsync(() -> doSomethingAndReturnResult())
 +                .thenAccept(System.out::println)
 +                .whenComplete((nothing, error) -> System.out.println("Fin"));
 +</code>
 +
  
 ==== CountDownLatch ==== ==== CountDownLatch ====
Line 612: 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, puede no interesar puesto que, al ejecutarse de forma paralela, no se garantiza en que orden se ejecutarán
 +
 +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
 +
 +<figure>
 +{{ parallel-sequential.png }}
 +<caption>Ejecución stream secuencial vs stream paralelo</caption></figure>
 +
 +En los streams paralelos, se procesan los elementos de forma paralela por segmentos
 +
 +<code java>
 +List<String> cities = new ArrayList<>(); 
 +// TODO Poblar la lista de ciudades 
 +cities.parallelStream()
 +  .forEach(System.out::println);
 +</code> 
 +
 +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, i -> i + 1)
 +  .limit(500000)
 +  .parallel() 
 +  .filter(Main::isPrime) 
 +  .count();
 +System.out.println("Hay " + count + " números primos");
 +</code>
  
 ==== Locks ==== ==== Locks ====
apuntes/concurrencia.txt · Last modified: 2023/05/28 23:59 by Santiago Faci