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.

Entradas relacionadas: