Conceptos Previos
Programa: Conjunto de órdenes diseñadas y almacenadas en ficheros que siguen la sintaxis de un lenguaje de programación específico, ejecutando tareas en un ordenador.
Proceso: Programa en ejecución que incluye el código, los datos y todo lo necesario para su ejecución, como el contador del programa, una imagen de memoria y el estado del procesador.
Ejecución y Sistemas
Ejecutable: Fichero necesario para crear un proceso y ponerlo en ejecución.
Demonio: Proceso no interactivo que se ejecuta en segundo plano, ofreciendo servicios básicos para otros procesos.
Sistema Operativo: Programa intermediario entre el usuario y el hardware del ordenador, facilitando la ejecución de programas, la gestión de procesos y la eficiencia en el uso de recursos.
Programación Multiproceso
Concurrencia: Ejecución simultánea de múltiples tareas.
Multiprogramación: Un solo procesador ejecuta un proceso a la vez, intercambiándolos sin mejorar el tiempo global de ejecución.
Multitarea: Un procesador con varios núcleos ejecuta varias instrucciones simultáneamente del mismo programa, mejorando el rendimiento.
Programación Distribuida: Ordenadores conectados en red, cada uno con su procesador y memoria, mejorando el rendimiento sin compartir memoria.
Procesos y Planificación
Estados de un Proceso: Creación, listo, ejecución, espera y finalización.
Creación y Terminación: Procesos se crean durante el arranque del sistema, por llamadas al sistema o por petición del usuario, y terminan por salida normal o errores.
Planificación de Procesos: El sistema operativo gestiona procesos en colas y selecciona su ejecución según algoritmos de planificación a corto y largo plazo.
Comunicación y Sincronización
Cambio de Contexto: Guardado y restauración del estado de un proceso al cambiar de uno a otro, lo cual implica un tiempo perdido por el procesador.
Árbol de Procesos: Jerarquía de procesos formada por procesos padre e hijo, identificados por un PID único.
Comunicación entre Procesos: Utilizando flujos de entrada y salida (stdin, stdout, stderr) y otras técnicas como memoria compartida o archivos.
Multiproceso en Java
Clase
Process
: Representa un proceso en Java, permitiendo su creación, gestión y comunicación.ProcessBuilder
yRuntime.exec()
: Métodos para crear procesos nativos en el sistema operativo y controlarlos desde Java.Comunicación de Procesos: A través de flujos de datos (
OutputStream
,InputStream
,ErrorStream
), permitiendo la interacción entre procesos padre e hijo.
Conceptos Básicos
Hilo (Thread): Es la unidad básica de ejecución de CPU dentro de un proceso, permitiendo que un programa realice múltiples tareas simultáneamente. Los hilos de un mismo proceso comparten recursos y espacio de memoria.
Ventajas de los Hilos
Respuesta y Eficiencia: Los hilos mejoran la capacidad de respuesta de los programas y permiten una gestión eficiente de recursos, al compartir memoria y otros recursos del proceso al que pertenecen.
Paralelismo Real: Aprovechan arquitecturas multicore para ejecutar múltiples hilos en paralelo, mejorando significativamente el rendimiento del programa.
Estados de un Hilo
Los hilos, al igual que los procesos, pasan por varios estados durante su ciclo de vida, incluyendo Nuevo (New), Ejecutable (Runnable), Bloqueado, y Muerto (Dead).
Hilos en Java
Clase
Thread
y InterfazRunnable
: Java incorpora la programación de hilos a través de la claseThread
y la interfazRunnable
, ofreciendo métodos para crear, ejecutar y gestionar hilos.
Gestión de Hilos
Creación y Ejecución: Los hilos pueden crearse implementando la interfaz
Runnable
o extendiendo la claseThread
, iniciando su ejecución con el métodostart()
.Espera y Suspensión: Las operaciones
join()
ysleep()
permiten gestionar la ejecución de hilos, ya sea esperando a que un hilo termine o suspendiendo su ejecución temporalmente.Interrupción: La interrupción de hilos se maneja con el método
interrupt()
, permitiendo alterar el flujo normal de ejecución de un hilo.
Planificación y Sincronización de Hilos
Planificación: El SO y la JVM deciden cuándo y cómo se ejecutan los hilos, a menudo utilizando algoritmos basados en prioridades.
Sincronización: Es crucial para evitar problemas como condiciones de carrera e inconsistencias de memoria. Java ofrece mecanismos como semáforos, monitores y bloques sincronizados (
synchronized
) para gestionar el acceso a recursos compartidos.
Problemas Comunes en la Programación de Hilos
Se discuten varios problemas potenciales en la programación concurrente, incluyendo condiciones de carrera, interbloqueo (deadlock), y otros, junto con estrategias para manejarlos efectivamente.
Este resumen capta los aspectos esenciales de la programación de hilos, proporcionando una base sólida para comprender cómo diseñar y desarrollar aplicaciones concurrentes en Java de manera eficiente y segura.
Conceptos Básicos de Sistemas Distribuidos
- Se introducen los sistemas distribuidos, donde múltiples ordenadores colaboran y se comunican a través de una red. La computación distribuida es esencial para el funcionamiento de internet y los servicios basados en la nube, permitiendo que los recursos y servicios sean accesibles de manera transparente.
Fundamentos de la Comunicación en Red
- Se explican los elementos básicos de la comunicación, incluyendo el emisor, receptor, canal, mensaje, paquete, y protocolo. Estos conceptos son fundamentales para entender cómo se intercambia información entre aplicaciones a través de una red.
Redes de Ordenadores
- Se describen los tipos de redes (LAN, MAN, WAN), que varían en extensión y propósito, desde redes de área local hasta redes de área extensa utilizadas para conectar dispositivos a gran escala geográfica.
Protocolos de Comunicaciones
- Se discute la organización de redes en capas o niveles para simplificar su diseño y funcionamiento, destacando la jerarquía de protocolos que permite la interoperabilidad entre dispositivos y aplicaciones.
Programación con Sockets
- Se introducen los sockets como mecanismo fundamental para la programación de comunicaciones en red, explicando cómo facilitan la transferencia de información entre aplicaciones, ya sea dentro de una LAN o a través de internet.
TCP y UDP
- Se comparan los protocolos TCP (Protocolo de Control de Transmisión) y UDP (Protocolo de Datagrama de Usuario), subrayando sus diferencias en términos de confiabilidad, orden de entrega, y orientación a la conexión.
Direcciones IP y Puertos
- Se explica el uso de direcciones IP y puertos para identificar dispositivos y aplicaciones en una red, permitiendo el enrutamiento preciso de mensajes y datos.
Tipos de Sockets
- Se distinguen entre sockets de flujo (stream) y sockets de datagrama, resaltando sus aplicaciones y características según el protocolo de transporte utilizado (TCP o UDP).
Modelos de Comunicación
- Se presentan diferentes modelos de comunicación en red, como el modelo cliente/servidor y el modelo de comunicación en grupo, junto con sus aplicaciones y ventajas.
Modelos Híbridos y Redes P2P
- Se discuten los modelos híbridos de comunicación, incluyendo las redes peer-to-peer (P2P), que combinan aspectos de los modelos cliente/servidor y comunicación en grupo para crear sistemas más robustos y tolerantes a fallos.