Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modelo de Hilos
7 de noviembre de 2010
UTEM
Modelo de Hilos
2 Modelo de Hilos
UTEM
Contenidos
2 Modelo de Hilos
Modelo de Hilos
UTEM
Modelo de Hilos
UTEM
Modelo de Hilos
UTEM
Modelo de Hilos
Ventajas
Amigable al programador. Compartir datos entre tareas es rapido debido a la proximidad de los procesadores. Tienen un bajo costo. Aun mas si se usan tecnologias multicore. Una descomposicion de datos disjunta no requiere sincronizacion. Ampliamente disponible en hardware de consumo masivo (Comodity).
UTEM
Modelo de Hilos
Desventajas
El cuello de botella es el acceso a la memoria compartida. Para alivianar el cuello de botella, se usa memoria cache en cada procesador. Con el uso de memoria cache, se produce el problema de coherencia de cache. Compartir datos entre procesos requiere sincronizacion entre estos para evitar corrupcion de datos. Un programador descuidado puede provocar que el programa corrompa datos y tenga un comportamiento randomico. (Ver caso Therac). Esto produce condiciones de carrera (Race conditions).
Matias Valdenegro Modelo de Memoria Compartida UTEM
Modelo de Hilos
UTEM
Contenidos
2 Modelo de Hilos
Modelo de Hilos
Hilos (Threads)
Un hilo es un contexto de ejecucion independiente dentro de un proceso de sistema operativo. Varios hilos dentro de un proceso de SO pueden ejecutarse en diferentes procesadores, alcanzando paralelismo. Varios hilos ejecutandose dentro de un solo procesador se ejecutan en estilo round-robin.
UTEM
Modelo de Hilos
UTEM
Modelo de Hilos
UTEM
Modelo de Hilos
UTEM
Modelo de Hilos
Hilos (Threads)
El SO provee soporte a Hilos. Windows/Linux y Mac OS X lo soportan. El planicador del SO decide que hilos se ejecutan en que procesadores. El programador puede inuir en la decision. La creacion de un thread es barato en comparacion a crear un proceso.
UTEM
Modelo de Hilos
APIs de Hilos
UTEM
Modelo de Hilos
Inicializacion
UTEM
Modelo de Hilos
Creacion
#include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
UTEM
Modelo de Hilos
Salida
UTEM
Modelo de Hilos
Union
UTEM
Modelo de Hilos
Ejemplo
#include <pthread.h> void *mensaje(void *ptr) { printf("%s \n", (char *) ptr); } int main() { pthread_t thread1, thread2; pthread_create(&thread1, NULL, mensaje, (void*) "hola"); pthread_create(&thread2, NULL, mensaje, (void*) "chao"); pthread_join(thread1, NULL); pthread_join(thread2, NULL); } gcc -pthread codigo.c -o ejecutable
Matias Valdenegro Modelo de Memoria Compartida UTEM
return NULL;
Modelo de Hilos
Implementaciones de Pthreads NPTL en Linux. pthreads-w23 en Windows. Otras formas de acceder a threads en C++ Windows Threads. boost::thread. QThread. std::thread, disponible en C++0x o C++1x.
UTEM
Modelo de Hilos
Interfaz Runnable
class Test implements Runnable { public void run() { /* Codigo del Thread. */ } } Thread t = new Thread(new Test()); t.start();
UTEM
Modelo de Hilos
Clase Thread
class Test extends Thread { public void run() { /* Codigo del Thread. */ } } Test t = new Test(); t.start();
UTEM
Modelo de Hilos
UTEM