Tema 3. Programación multihilo

Tras aprender los conceptos básicos de la programación concurrente y ver cómo los procesos pueden colaborar para conseguir multitarea, en este tema vamos a poner la mirada dentro de un proceso.

La ejecución de un proceso comienza con un único hilo, pero se pueden crear más sobre la marcha. Los distintos hilos de un mismo proceso comparten:

  • El espacio de memoria asignado al proceso
  • La información de acceso a ficheros (incluyendo stdin, stdout y stderr).

Las características anteriores son las que los diferencias de los procesos. En cambio, cada hilo tiene sus propios valores para

  • Los registros del procesador
  • El estado de su pila (stack), donde entre otras cosas se almacenan las variables locales.

Por lo tanto, vamos a utilizar los threads para realizar programación concurrente y/o paralela dentro de un proceso.

Aunque los hilos se ejecutan en el contexto de un procesos, cada uno tiene su TCB (Tread Control Block) que es sensiblemente más pequeños que el PCB (Process Control Block) porque entre los hilos comparten gran parte de ese PCB. Por eso veremos que a los hilos también se le llama lightweight processes (procesos ligeros) y por tanto los cambios de contexto en el procesador son mucho menos costosos para los hilos que para los procesos.

Hilos: comunicación vs sincronización

Por todo lo comentado, el intercambio de información entre hilos es sencillo, dado que los distintos hilos de un mismo proceso comparten la memoria asignada al proceso.

Sin embargo, los hilos deben coordinarse para el acceso a los contenidos de la memoria y a los ficheros, lo cual hace que esa coordinación y sincronización sea la parte complicada de uso.

De eso va este tema.

Objetivos

Objetivos de esta unidad:

  • Conocer las técnicas básicas para desarrollar aplicaciones multihilo en Java
  • Crear y lanzar varios hilos que compartan información
  • Depurar aplicaciones multihilo
  • Usar los métodos de sincronización para procesos y subprocesos
  • Compartir información entre los hilos de un proceso
  • Aprender acerca de los problemas de acceso a memoria compartida
  • Usar diferentes técnicas de programación para sincronizar la ejecución de los threads.
Última actualización:
Editores: Vicente Martínez