POOA Teoría 9. Programación Concurrente (I)
POOA Teoría 9. Programación Concurrente (I)
POOA Teoría 9. Programación Concurrente (I)
Tema 9. PROGRAMACIÓN
CONCURRENTE (I)
PROCESO:
• Se denomina proceso a la ejecución de un programa secuencial en
un sistema informático -se dice que es un hilo (thread) de control-.
Independencia
Competencia Sincronización
Cooperación Comunicación
Uniprocesador Variables
compartidas
Multiprocesador
fuertemente
acoplados Paso de mensajes
Distribuidos
Tema 9. PROGRAMACIÓN CONCURRENTE (I) - 21
2. ARQUITECTURAS DE
SISTEMAS CONCURRENTES
MULTIPROCESAMIENTO Y MULTIPROGRAMACIÓN (I):
• Un programa concurrente puede ejecutarse de forma que cada
proceso se ejecute en su propio procesador (multiprocesamiento)
o que los procesos compartan uno o más procesadores
(multiprogramación).
- Multiprocesamiento. En un sistema multiprocesador, es
posible que cada proceso de un programa concurrente se
ejecute en un procesador físico distinto.
• Este primer enfoque se denomina multiprocesamiento si
los procesadores comparten memoria común (sistemas
multiprocesadores fuertemente acoplados), o como
procesamiento distribuido si los procesadores están
conectados por una red de comunicaciones (sistemas
distribuidos).
Tema 9. PROGRAMACIÓN CONCURRENTE (I) - 22
2. ARQUITECTURAS DE
SISTEMAS CONCURRENTES
MULTIPROCESAMIENTO Y MULTIPROGRAMACIÓN (II):
• En el multiprocesamiento, se dice que existe paralelismo
real en la ejecución de los procesos, lo que permite un
aumento de la velocidad de ejecución del programa.
a21 -> a22 -> a23 -> a11 -> a12 -> a13 x = 2
111111111111111111212111111111111111111121212121212222222222121212111122
2222222222222222222222222222
Fin del programa
Tema 9. PROGRAMACIÓN CONCURRENTE (I) - 57
5. EJECUCIÓN DE PROCESOS
HILOS (V):
• En la segunda versión quedaría:
class Aplicacion {
111111111111111111121212121212121212122222222222222222221222222222222222
2222111111111111111111111222
Fin del programa
Tema 9. PROGRAMACIÓN CONCURRENTE (I) - 58
5. EJECUCIÓN DE PROCESOS
Ejemplo:
public Aplicacion() {
ventana = new Ventana();
}
public Ventana() {
PanelContenido panelContenido = new PanelContenido();
this.setContentPane(panelContenido);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Ordenador");
this.setLocation(150, 150);
this.setPreferredSize(new Dimension(500, 150));
this.pack();
this.setResizable(true);
this.setVisible(true);
}
}
public PanelProceso() {
label = new JLabel("");
this.add(label);
}
private int i;
public Entero(int i) {
this.i = i;
}
private int i;
public Entero(int i) {
this.i = i;
}