1. Program ación Mu ltihilo
Threads ó Hilos de ejecución
➢
Una instancia de ejecución en un programa, pero
2. Program ación Mu ltihilo
Threads ó Hilos de ejecución
➢
Una instancia de ejecución en un programa, pero
más ligera que un proceso.
➢
Con lo que un proceso podría tener varios
Threads de ejecución.
3. Program ación Mu ltihilo
Threads ó Hilos de ejecución
➢
Una instancia de ejecución en un programa, pero
más ligera que un proceso.
➢
Con lo que un proceso podría tener varios
Threads de ejecución.
➢
Todos contenidos en él y compartiendo los
mismos recursos
4. Program ación Mu ltihilo
Sabemos trabajar con multitarea:
Usando fork y exec, ejecutamos varios programas a
la vez.
5. Program ación Mu ltihilo
Sabemos trabajar con multitarea:
Usando fork y exec, ejecutamos varios programas a
la vez.
¿Qué aplicamos si lo que queremos ejecutar son
varias funciones a la vez, ó la misma función
invocarla varias veces?
6. Program ación Mu ltihilo
Sabemos trabajar con multitarea:
Usando fork y exec, ejecutamos varios programas a
la vez.
¿Qué aplicamos si lo que queremos ejecutar son
varias funciones a la vez, ó la misma función
invocarla varias veces?
Usaremos Threads, funciones de la librería
pthread.
7. Program ación Mu ltihilo
Antes de pasar a un caso de estudio, veamos si
estamos de acuerdo con la siguiente afirmación:
8. Program ación Mu ltihilo
Antes de pasar a un caso de estudio, veamos si
estamos de acuerdo con la siguiente afirmación:
Un thread es a una función,
lo que un proceso es a un programa,
un environment en el cual se ejecuta.
9.
10. Program ación Mu ltihilo
Casos de estudio
Conseguir mensajes animados en salida
estandard.
Replantear el servidor web, manipulando
peticiones simultáneas sin comenzar nuevos
procesos
11. Program ación Mu ltihilo
Tenemos ya algo?
¿
1. mensajes animados
2 . servidor web, multihilo
En el primero, usaremos funciones de la
•
librería curses
En el segundo nos basamos en el servidor
•
web multitarea
12. Program ación Mu ltihilo
¿Cómo pueden comunicar los Threads?
Al igual que cualquier función del mismo proceso, los
threads comparten las variables globales.
13. Program ación Mu ltihilo
¿Cómo pueden comunicar los Threads?
Al igual que cualquier función del mismo proceso, los
threads comparten las variables globales.
Accesos simultáneos a memoria es un método simple
pero peligroso, ésta es una característica de los threads.
14. Program ación Mu ltihilo
¿Cómo pueden comunicar los Threads?
Al igual que cualquier función del mismo proceso, los
threads comparten las variables globales.
Accesos simultáneos a memoria es un método simple
pero peligroso, ésta es una característica de los threads.
Para prevenir accesos simultáneos a los mismos valores
es necesario aplicar mutex, es decir, debemos prevenir
la corrupción de datos.
15. Program ación Mu ltihilo
Efecto de mover un mensaje en la pantalla
funciones de la librería curses:
initscr() para inicializar curses y tty
endwin() reset tty y desactivar curses
refresh() pasar a screen lo que desamos
move(r,c) mover cursor a posición (r,c) de screen
addstr(s) poner string s sobre screen
addch(c) poner carácter c sobre screen
clear() limpiar screen
16. Program ación Mu ltihilo
Efecto de mover un mensaje en la pantalla
standout() activar modo standout (video inverso)
standend() desactivar modo standout
¿Qué hace la función refresh()?
Concepto de virtual y real screen
Recorremos los programas hello.c libro Molay
17. Program ación Mu ltihilo
¿Cómo realmente trabaja sleep?
Llamadas de sistema: alarm() y pause()
Nos proponemos mejor control del 'delay' ya que:
un segundo es demasiado grande en nuestro proyecto
necesitamos agregar una entrada de usuario
entonces aplicamos
hanler por SIGALARM alarm(nseg) pause()
18. Program ación Mu ltihilo
Intervalos de Tiempo
Tres timers: real virtual profile
Consideramos ITIMER_REAL
struct itimerval
it_value
it_interval
llamada de sistema getitimer() y setitimer()
programa ticker_demo.c libro Molay