Programación Concurrente y Gestión de Hilos en Java
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 4,53 KB
Programa:
- Conjunto de órdenes diseñadas y creadas a través del razonamiento lógico.
- Almacenadas en ficheros según la sintaxis de un lenguaje de programación.
- Al ejecutarse, realizan una o varias tareas en un ordenador.
Proceso:
- Programa en ejecución, incluyendo código, datos, contador de programa y estado del procesador.
- Entidades independientes, pueden coexistir ejecutando el mismo programa con diferentes datos y momentos.
Ejecutable:
- Fichero que contiene la información para crear un proceso a partir de los datos de un programa.
Demonio:
- Proceso no interactivo que se ejecuta en segundo plano, proporciona servicios básicos.
Sistema Operativo:
- Intermediario entre usuario, aplicaciones y hardware.
- Crea, ejecuta y gestiona procesos.
- Facilita el uso del ordenador y permite compartir recursos eficientemente.
Programación Concurrente:
- Permite ejecutar múltiples tareas simultáneamente.
- Puede ser implementada en un único procesador, en sistemas distribuidos o en procesadores con varios núcleos.
Estados de un Proceso:
- Nuevo, listo, en ejecución, bloqueado y terminado.
- Cambian según su ejecución y las operaciones realizadas.
Cambio de Contexto:
- Necesario cuando se cambia de un proceso a otro.
- Implica guardar y restaurar el contexto del proceso.
Colas de Procesos:
- Organizadas para multiprogramación.
- Incluyen cola de procesos, cola de procesos preparados y colas de dispositivos.
Planificación de Procesos:
- Corto plazo (selectivo o no selectivo) y largo plazo.
- Controla qué proceso se ejecutará y cuándo.
Creación y Terminación de Procesos:
- Puede ocurrir al arranque del sistema, por llamada al sistema, petición del usuario o inicio de trabajo por lotes.
Árbol de Procesos:
- Relación jerárquica entre procesos, con padres e hijos.
Comunicación de Procesos:
- Utiliza stdin, stdout y stderr para entrada y salida estándar.
- Se pueden utilizar streams para la comunicación entre procesos.
Sincronización de Procesos:
- Envío y recepción de datos como método de sincronización.
- Uso de wait() para esperar la finalización de un proceso hijo.
Multiproceso en Java:
- Clase Process para representar un proceso.
- Métodos como getOutputStream(), getInputStream(), destroy(), waitFor(), exitValue().
Hilos en Java:
- Un hilo es la unidad básica de utilización de la CPU dentro de un proceso.
- Los hilos comparten la memoria del proceso y permiten ejecutar tareas simultáneamente.
Ventajas de la programación de hilos:
- Capacidad de respuesta: Los hilos permiten atender peticiones del usuario mientras otras tareas se ejecutan.
- Compartición de recursos: Los hilos comparten memoria y recursos.
- No requieren reserva adicional de memoria: Utilizan la misma del proceso.
- Paralelismo real: Aprovechan múltiples núcleos en sistemas multicore.
Estados de un hilo:
- Nuevo: Hilo creado pero no en ejecución.
- Runnable: Hilo en ejecución o listo para ejecutarse.
- Bloqueado: Hilo detenido temporalmente por diversos motivos.
- Muerto: Hilo termina su ejecución.
Creación de hilos en Java:
- Implementando la interfaz Runnable o extendiendo la clase Thread.
- Métodos clave: start(), run(), join(), sleep(), interrupt(), isAlive().
Gestión de hilos:
- Espera de hilos: join() y sleep() para suspender temporalmente la ejecución.
- Interrupción de hilos: interrupt() para indicar al hilo que debe interrumpirse.
Planificación de hilos:
- Java utiliza un planificador apropiativo basado en prioridades.
- setPriority() y getPriority() para establecer y obtener prioridades de hilos.
Sincronización de hilos:
- Problemas: Condición de carrera, inconsistencia de memoria, inanición, interbloqueo.
- Mecanismos: Operaciones atómicas, sección crítica, semáforos (wait, signal), monitores (synchronized).
Clase Object en Java:
- Métodos wait() y notify() para implementar sincronización a nivel de objeto.
- Utilizados dentro de bloques synchronized.