Programación Multiproceso
Programación Multiproceso
MULTIPROCESO
PROGRAMACIÓN DE SERVICIOS Y PROCESOS. 2º D.A.M. 2022/2023
PROGRAMACIÓN MULTIPROCESO
Ejecutable. archivo con la estructura necesaria para que el SO pueda poner en marcha el programa que hay
dentro.(WINDOWS, .EXE)
JAVA: .jar y .class no son ejecutables, los ejecuta el intérprete java.exe (Proceso JIT, al instante)
Servicio. Proceso que no muestra ninguna ventana ni gráfico en pantalla (NO USUARIO)
hilo es mucho más ligero, código y los datos se comparten de una forma distinta.
Creación de procesos.
En Java es posible crear procesos utilizando algunas clases que el entorno ofrece para esta tarea. En este tema, veremos en profundidad
la clase ProcessBuilder.
ProcessBuilder pb;
try {
pb = new ProcessBuilder(ruta);
pb.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
String ruta=
"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe";
LanzadorProcesos lp=new LanzadorProcesos();
lp.ejecutar(ruta);
System.out.println("Finalizado");
}
PROGRAMACIÓN MULTIPROCESO
Ejecutables. Procesos. Servicios.
Necesitamos crear un programa que aproveche al máximo el número de CPUs para realizar alguna tarea
intensiva. Supongamos que dicha tarea consiste en sumar números.
Enunciado: Crear una clase Java que sea capaz de sumar todos los números comprendidos entre dos valores
incluyendo ambos valores.
Crear clase Sumador que tenga un método que acepte dos nºs n1 y n2 y que devuelva la suma del intervalo.
Incluir un método main que ejecute la operación de suma tomando los números de la línea de comandos (es
decir, se pasan como argumentos al main).
PROGRAMACIÓN MULTIPROCESO
Ejecutables. Procesos. Servicios.
PROGRAMACIÓN MULTIPROCESO
Obliga usar mecanismos específicos de comunicación que ofrecerá Java (o a diseñar alguno
separado que evite los posibles problemas).
PROGRAMACIÓN
MULTIPROCESO
Ejercicio
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.
PROGRAMACIÓN
MULTIPROCESO
En el listado
siguiente se muestra
la clase Sumador:
public class Main {
MULTIPROCESO
public static void lanzarSumador(
int n1, int n2,String fichResultados) throws
IOException{
String comando;
comando="es.ies.multiproceso.Sumador";
Se muestra la
File directorioSumador;
clase Main directorioSumador=new File("C:\\Users\\"+
"ogomez\\workspace\\"+
"MultiProceso1\\bin\\");
File fichResultado=new File(fichResultados);
ProcessBuilder pb;
pb=new ProcessBuilder("java",
comando,
String.
valueOf(n1),
String.
valueOf(n2) );
pb.directory(directorioSumador);
pb.redirectOutput(fichResultado);
pb.start();
}
public static int getResultadoFichero(
String nombreFichero){
int suma=0;
PROGRAMACIÓN try {
MULTIPROCESO FileInputStream fichero=
new FileInputStream(nombreFichero);
InputStreamReader fir=
new InputStreamReader(
fichero);
BufferedReader br=new BufferedReader(fir);
String linea=br.readLine();
suma= new Integer(linea);
return suma;
} catch (FileNotFoundException e) {
System.out.println(
"No se pudo abrir "+nombreFichero);
} catch (IOException e) {
System.out.println(
“No hay nada en "+nombreFichero);
}
return suma;
}
public static int getSumaTotal(int numFicheros){
int sumaTotal=0;
for (int i=1; i<=NUM_PROCESOS;i++){
PROGRAMACIÓN sumaTotal+=getResultadoFichero(
PREFIJO_FICHEROS
+String.valueOf(i) );
MULTIPROCESO }
return sumaTotal;
}
sumaTotal);
}
}
PROGRAMACIÓN Sincronización entre procesos.
MULTIPROCESO
● Semáforos.
● Colas de mensajes.
● Tuberías (pipes)
● Bloques de memoria compartida.
Depuración
synchronized