Diferencia entre revisiones de «Programación multifío»

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Página creada con «= Resumo = * A execución dun proceso comeza con un único fío, pero este pode crear novos fíos sobre a marcha. Os distintos fíos dun mesmo proceso comparten memoria e c…»)
 
Línea 13: Línea 13:
 
* Os entornos de desarrollo suelen permitir la depuración de aplicaciones multihilo y proporcionar herramientas para la detección de interbloqueos.
 
* Os entornos de desarrollo suelen permitir la depuración de aplicaciones multihilo y proporcionar herramientas para la detección de interbloqueos.
 
* o paquete java.util.concurrent proporciona mecanismos de alto nivel para concurrencia.
 
* o paquete java.util.concurrent proporciona mecanismos de alto nivel para concurrencia.
 +
 +
= Práctica =
 +
* [[Programación de fíos con Java]]
 +
* [[Programación de fíos con Python]]
  
 
= Glosario =
 
= Glosario =

Revisión del 03:44 13 sep 2021

Resumo

  • A execución dun proceso comeza con un único fío, pero este pode crear novos fíos sobre a marcha. Os distintos fíos dun mesmo proceso comparten memoria e código de programa.
  • O acceso ós obxectos compartidos por distintos fíos dun mesmo proceso deben controlarse mediante mecanismos de sincronización, para evitar erros que poderían darse se máis dun fío modifica á vez o estado deses obxectos.
  • Os fios en Java se representan mediante objetos de la clase Thread . Se pueden crear hilos a partir de objetos de cualquier clase que implemente la interfaz Runnable . La propia clase Thread implementa esta interfaz.
  • El proceso que realiza un hilo se implementa en el método run . Se inicia la ejecución de un hilo con el método start , que a su vez ejecuta el método run .
  • El método join suspende la ejecución del hilo actual a la espera de que termine la ejecución del hilo para el que se invoca.
  • La palabra clave synchronized hace que un hilo solo pueda ejecutar un bloque de código tras obtener el bloqueo de un objeto de bloqueo, que se libera una vez ejecutado el bloque. Si el objeto de bloqueo está bloqueado, se suspende la ejecución del hilo a la espera de conseguir el bloqueo del objeto de bloqueo. De esta manera, se consigue que el bloque de código se ejecute en exclusión mutua con otros hilos. Se puede aplicar para métodos no estáticos (en cuyo caso, el objeto de bloqueo es el objeto para el que se ejecuta el método, this ), para métodos estáticos (en cuyo caso, el objeto de bloqueo es la clase a la que pertenece el método) y para bloques de código cualesquiera (en cuyo caso, se especica explícitamente el objeto de bloqueo).
  • El interbloqueo o deadlock se produce cuando dos o más hilos mantienen bloqueados un conjunto de objetos de bloqueo, y su ejecución está suspendida a la espera de conseguir bloquear cada uno un nuevo objeto de bloqueo, que no pueden bloquear porque ya están bloqueados por otros hilos.
    • Podese evitar o interbloqueo establecendo unha orde para os obxectos de bloqueo, e todos os hilos se bloquean segundo este orde.
  • Si, una vez conseguido el bloqueo sobre un objeto de bloqueo obj en un bloque de código synchronized(obj) , un hilo comprueba que no se dan las condiciones necesarias para continuar con su ejecución, puede ejecutar wait() sobre el objeto de bloqueo con obj.wait() . Con ello, su ejecución queda suspendida, y en espera no activa, mientras que otro objeto no ejecute obj.notifyAll() u obj.notify() . notifyAll() reanuda todos los procesos a la espera en el objeto de bloqueo, mientras que notify() reanuda solo uno de ellos.
  • Podense incluir nunha clase os mecanismos de sincronización apropiados para permitir o uso dos seus obxectos por distintos fíos de xeito concurrente. Desa maneira, non é preciso implementar neses fíos ningún mecanismo de sincronización para controlar o acceso concurrente ós objetos da clase. Se dice entonces que la clase es thread-safe o segura para su uso concurrente por parte de varios hilos. O paquete java.util.concurrent incluye una variedad de clases thread-safe.
  • En general, deben programarse los hilos de manera que se permita su interrupción por parte de otros hilos. Para ello, deben gestionar de manera apropiada la excepción InterruptedException, comprobar cada cierto tiempo si han sido interrumpidos con isInterrupted() o interrupted() , y realizar las acciones oportunas en su caso.
  • Os entornos de desarrollo suelen permitir la depuración de aplicaciones multihilo y proporcionar herramientas para la detección de interbloqueos.
  • o paquete java.util.concurrent proporciona mecanismos de alto nivel para concurrencia.

Práctica

Glosario

  • Condición de carrera. Situación na que o correcto resultado dun programa depende do orden en que se intercale a execución das instruccións dos seus diferentes fíos.
  • Espera non activa. Situación na que se atopa un fío cuxa eeecución se atopa suspendida, de xeito que non utiliza tempo de procesador para comprobar se se dan as condicións para reanudar a súa execución. Cuando iso suceda, outro fío enviará unha notificación que permitirá a reanudación da súa execución.
  • Fío. Unidade de execución dun programa asociada a un proceso. Distintos fíos dun mesmo proceso comparten código de programa e datos.
  • Interbloqueo. Situación en que dous ou máis fios están bloqueados mutuamente, todos eles esperando para conseguir o bloqueo sobre obxectos de bloqueo bloqueados por outros fíos, de xeito que ningún de eles poderá continuar nunca.
  • Método sincronizado. Os métodos sincronizados de Java executanse en exclusión mutua entre distintos fíos.
  • Obxecto de bloqueo. Obxecto sobre o que hai que obter un bloqueo para poder executar un bloque de código. O bloqueo se libera cando termina a ejecución do bloque de código.
  • Sección crítica. Fragmento dun programa que non pode executar de maneira simultánea (concurrentemente) máis dun fío do programa; é decir, que distintos fíos se deben executar en exclusión mutua.
  • Thread-safe. Díse dunha clase cuxos métodos implementan os mecanismos de sincronización precisos para o uso concurrente dos seus obxectos por parte de disintos fíos, de xeito que non é necesario ningún mecanissmo de sincronización externo á propia clase.

Créditos e referencias