Programación multifío

De MediaWiki
Ir a la navegación Ir a la búsqueda

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.
  • O 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.

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