Procesos en Java (DUDA)

y34hl0ve

Antes de nada, no estoy pidiendo la solución, solo quiero entender el problema.

Buenas chicos, estoy cursando 2º de DAM y en la asignatura de servicios y procesos nos han mandado un ejercicio que no consigo comprender ¿me podéis echar una mano?

Enunciado
Crear un programa que permita parametrizar el lanzamiento de sumadores, que vuelque el contenido de las sumas en ficheros y que permita al programa principal recuperar las sumas de los ficheros parciales.

Para ello, se establecerán como argumentos dos números enteros divisibles y se dividirá la serie de números en 4 sumas parciales (procesos).


En la primera parte todo bien, pero en la segunda parte, cuando pide la serie de números en 4 sumas parciales no la consigo comprender ¿alguno me puede hacer de profesor xD?

He estado buscando por internet y CREO que he encontrado la solución, pero ni aún así consigo entenderla.

Clase Sumador
Lanzador
Salida con parámetros 8 16

Todo bien hasta que llegamos al bucle del Main, ahí me quedo totalmente perdido con los cálculos que hace... entiendo que al no entender el enunciado no sé que coño esta haciendo.

Mi cabeza entiende que si tengo como parámetros 8 y 16, debería de hacer:
16/8 = 8
8/4 = 2
por lo que debería hacer el proceso de suma en incrementos de 2: sumador(8,10), sumador(10,12), sumador(12,14), sumador(14,16), para luego sumar el resultado total, pero no sé si estoy en lo correcto.

Gracias chicos!

JuAn4k4

Creo que deberías usar Threads y un ForkJoinPool para lanzar los sumadores.
Lo de los números divisibles creo que más o menos lo que yo entiendo es:
Si me dan 8 y 16, tengo que en teoría sumar 8 y 16, pero entre 4 procesos diferentes, entonces:
8/4=2
16/4=4

Entonces lanzas desde el thread principal 4 threads para que hagan las 4 sumas por separado y guarde el resultado en un fichero diferente cada uno.
El thread principal espera haciendo .join() para después leer los ficheros y hacer la suma de los 4 resultados (6), y obteniendo 24.

Te dejo el magnífico Badelung que te ira bien para mierdas de Java: https://www.baeldung.com/java-fork-join

Puedes leer más sobre los pools https://www.baeldung.com/thread-pool-java-and-guava

1 1 respuesta
y34hl0ve

#2 Gracias por la ayuda! Todavía no hemos dado Threads, por lo que supongo que no debería de usarlos.
He estado hablando también con algunos compañeros y todos creemos que es dividir el proceso en 4 sumas, por ejemplo para 1 y 100 las sumas serían: 1,25 26,50 51,75 76,100.
En este caso en concreto funcionaría, pero si metemos por ejemplo 8/16 nos pasamos como puse antes...

Me podrías explicar un poco lo de 8/4 y 16/4? No lo entiendo muy bien.

Gracias de nuevo.

1 respuesta
JuAn4k4

#3 Si hay que crear 4 procesos para que sumen los dos números (8 y 16), divido cada número por 4 para saber cuánto le toca sumar a cada proceso por separado.

Como lo entendéis vosotros sería una serie, también tiene sentido, pero no entiendo para que han de ser divisibles.

Yo preguntaría al profesor para que lo aclare.

1 1 respuesta
y34hl0ve

#4 La tarea la tenía que entregar ayer (que entregué lo que tenía) y el miércoles le mandé un correo para que me la explicara, todavía no tengo respuesta... xD

Ya te he entendido, muchas gracias! Ya cuando quiera el profesor responder resolveré la duda...

2

Usuarios habituales

  • y34hl0ve
  • JuAn4k4