Diferencia entre revisiones de «Programación multifío»
(→Resumo) |
|||
| Línea 1: | Línea 1: | ||
| + | = Programación de fíos = | ||
| + | A execución dun proceso comenza cun único fío pero se poden crear máis sobre a marcha. Os distintos fíos dun mesmo proceso comparten: | ||
| + | |||
| + | * O espazo de memoria asignado ó proceso. | ||
| + | * A información de acceso a ficheiros. Estos se utilizan non só para almacenar datos, se non tamén para controlar dispositivos de entrada e saída (E/S). | ||
| + | |||
| + | En cambio, cada fío ten os seus propios valores para: | ||
| + | * Os rexistros do procesador. | ||
| + | * O estado da súa pila (stack). Na pila gárdase información acerca das chamadas en curso de execución a métodos de diversos obxectos. Para cada chamada gardanse entre outras cousas os datos locales (en variables internas do método). | ||
| + | |||
| + | O intercambio de información entre fíos é sinxelo, dado que os distintos fíos dun mesmo proceso comparten a memoria asignada ó proceso polo sistema operativo. Pero os distintos fíos dun mesmo proceso deben coordinarse para ó acceso os contidos da memoria e ós ficheiros que se utilizan para controlar as operacións de E/S. | ||
| + | |||
| + | == Utilidade dos fíos == | ||
| + | Podense utilizar fíos en situacións moi diversas, coma por exemplo: | ||
| + | * Programas servidores que proporcionan servizos a outros procesos. Por exemplo un servidor web ou de bases de datos. Cada petición ó servidor pódese atender nun fío distinto. Desa xeito podense atender simultáneamente moitas peticións de servizo mellorando o tempo de resposta para elas. Máis adiante aprenderase a programar servidores multifío que prestan servizos a oturos procesos a través de protocolos estándares de rede, e que crean sobre a marcha novos fíos para atender novas peticións. | ||
| + | * Programas variados que amosan unha interfaz gráfica de usuario mentres realizan procesos en segundo plano. Por exemplo un procesador de texto ou unha folla de cálculo. Neste exemplo, un fío podería responder ás acciones do usuario sobre a interfaz mentres outro podería recalcular os valores que cambian en calquera celda como consecuencia do cambio no valor dunaha celda, e volver a mostrar os novos | ||
| + | valores; e outro finalmente podería ocuparse de gardar o documento periódicamente. | ||
| + | * Xogos nos que intervieñen moitos elementos que interactúan entre eles, e que poden ser controlados polos usuarios. En lugar dun único fío que controle todos os elementos do xogo, podente ter distintos fíos para distintos elementos do xogo. | ||
| + | * Programas de control en tiempo real. Estos controlan un sistema mediante dispositivos sensores e actuadores. Obteñen información do estado do sistema a través de dispositivos sensores, e actúan sobre él mediante dispositivos actuadores. Un exemplo sería | ||
| + | un programa de control do acceso a un aparcadoiro no que debe detectar a chegada de vehículos mediante determinados sensores, e debe actuar sobre o sistema amosando información para os conductores nunha pantalla, facendo que se xeren os tickets, e levantando e baixando unha barrera en momentos determinados. Os múltiples dispositivos que interveñen neste proceso podense controlar mediante distintos fíos que se comunican e coordinan entre sí. | ||
| + | |||
= Resumo = | = 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. | * 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. | ||
Revisión del 04:45 13 sep 2021
Sumario
Programación de fíos
A execución dun proceso comenza cun único fío pero se poden crear máis sobre a marcha. Os distintos fíos dun mesmo proceso comparten:
- O espazo de memoria asignado ó proceso.
- A información de acceso a ficheiros. Estos se utilizan non só para almacenar datos, se non tamén para controlar dispositivos de entrada e saída (E/S).
En cambio, cada fío ten os seus propios valores para:
- Os rexistros do procesador.
- O estado da súa pila (stack). Na pila gárdase información acerca das chamadas en curso de execución a métodos de diversos obxectos. Para cada chamada gardanse entre outras cousas os datos locales (en variables internas do método).
O intercambio de información entre fíos é sinxelo, dado que os distintos fíos dun mesmo proceso comparten a memoria asignada ó proceso polo sistema operativo. Pero os distintos fíos dun mesmo proceso deben coordinarse para ó acceso os contidos da memoria e ós ficheiros que se utilizan para controlar as operacións de E/S.
Utilidade dos fíos
Podense utilizar fíos en situacións moi diversas, coma por exemplo:
- Programas servidores que proporcionan servizos a outros procesos. Por exemplo un servidor web ou de bases de datos. Cada petición ó servidor pódese atender nun fío distinto. Desa xeito podense atender simultáneamente moitas peticións de servizo mellorando o tempo de resposta para elas. Máis adiante aprenderase a programar servidores multifío que prestan servizos a oturos procesos a través de protocolos estándares de rede, e que crean sobre a marcha novos fíos para atender novas peticións.
- Programas variados que amosan unha interfaz gráfica de usuario mentres realizan procesos en segundo plano. Por exemplo un procesador de texto ou unha folla de cálculo. Neste exemplo, un fío podería responder ás acciones do usuario sobre a interfaz mentres outro podería recalcular os valores que cambian en calquera celda como consecuencia do cambio no valor dunaha celda, e volver a mostrar os novos
valores; e outro finalmente podería ocuparse de gardar o documento periódicamente.
- Xogos nos que intervieñen moitos elementos que interactúan entre eles, e que poden ser controlados polos usuarios. En lugar dun único fío que controle todos os elementos do xogo, podente ter distintos fíos para distintos elementos do xogo.
- Programas de control en tiempo real. Estos controlan un sistema mediante dispositivos sensores e actuadores. Obteñen información do estado do sistema a través de dispositivos sensores, e actúan sobre él mediante dispositivos actuadores. Un exemplo sería
un programa de control do acceso a un aparcadoiro no que debe detectar a chegada de vehículos mediante determinados sensores, e debe actuar sobre o sistema amosando información para os conductores nunha pantalla, facendo que se xeren os tickets, e levantando e baixando unha barrera en momentos determinados. Os múltiples dispositivos que interveñen neste proceso podense controlar mediante distintos fíos que se comunican e coordinan entre sí.
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.