Você está na página 1de 6

ITCR. Aguilar, Murillo,Espinoza , .

Hilos en C y Python
.

Tarea 2: Hilos en C y en Python


Jos A. Espinoza Chacn
c.aej@hotmail.com
Sebastin N. Murillo Barrantes
sn.Gdrealm7@gmail.com

Los hilos son ejecutados dentro del contexto


RESUMEN: En el presente informe se describe la de un proceso, para multi-hilo en un proceso
definicin, importancia, utilidad y aplicaciones en la
programacin de los hilos, la unidad ms bsica de
hay ms de uno en un mismo contexto y
ejecucin de instrucciones por parte del CPU de manera comparten cdigo, datos y kernel.
secuencial. Se menciona su rol en sistemas multi-hilo,
sus ventajas y desventajas frente a otros enfoques en el Al compararse con los procesos, estos
manejo de recursos como los procesos. Por ltimo se ltimos son independientes pero los hilos son
distingue entre los hilos del tipo usuario y de kernel y subgrupos de un proceso. Los procesos
como se puede aprovechar mediante niveles de
abstraccin un rendimiento del sistema al utilizar los tienen un espacio de direccin diferente
hilos eficientemente. mientras que los hilos lo comparten. Los
procesos se comunican mediante IPC
PALABRAS CLAVE: hilo, kernel, usuario, provedo por el sistema como cliente y
abstraccin, directivas, Python, C.
servidor por ejemplo. Finalmente cambiar de
contexto entre hilos es de un orden de
1 INTRODUCCIN
magnitud ms rpido que hacerlo entre
procesos, o sea 10 veces ms FLoating-point
Al ser una unidad tan bsica de la Operations Per Second.
programacin tan cercana al el rol del
lenguaje mquina y utilizable por lenguajes de
3 Multi-Hilo
alto nivel, el control de los hilos de un sistema
Se mejora la estructura del programa as
es vital para aprovechar el mximo
evitando problemas como el problema del
rendimiento del sistema y en muchos casos
productor-consumidor que comparten un solo
enfocarlo a ser ms eficiente en el rea
buffer usado como cola y la dinmica es que
particular de inters del usuario. Al usarse
el productor no almacene datos si la cola esta
adecuadamente pueden llegar a mejorar
llena que el consumidor no los quite de la cola
inclusivamente el uso de los recursos de
si est vaca.
hardware del sistema si se crea un sistema
operativo basado en el manejo adecuado de La eficiencia es mayor ya que al crear un
los hilos de procesamiento. proceso se llama al sistema operativo
duplicando el espacio de direccionamiento as
2 DEFINICIN como para la sincronizacin de procesos. Los
hilos se pueden crear en espacios definidos
Un hilo es la unidad ms bsica de utilizacin por el usuario y se pueden sincronizar al
del CPU; es un flujo de control secuencial. En monitorear variables compartidas. Es
un nico hilo existe en cualquier instante un equiparable con la arquitectura multi-ncleo y
nico punto de ejecucin. Sin embargo, multi-procesador. Se mejora la responsividad
cuando se tienen mltiples hilos en un de las aplicaciones como en el problema
programa significa que en cualquier instante el puertos I/O que se traslapan. Son posibles los
programa tiene mltiples puntos de ejecucin, clientes multi-hilo y una rpida escritura y
uno en cada uno de sus hilos. El programador lectura y se pueden manejar eventos de
decide cuando y donde crear mltiples hilos, manera asncrona.
ayudndose de una librera o paquete en
tiempo de ejecucin.

1
ITCR. Aguilar, Murillo,Espinoza , . Hilos en C y Python
.

4 UTILIDAD Los hilos de usuario son de un orden


de magnitud ms rpido que una
Una librera o paquete de hilos permite excepcin de kernel, es decir entre
escribir programas con varios puntos llamada al sistema y llamada de
simultneos de ejecucin, sincronizados a procedimiento hay 5us de diferencia.
travs de memoria compartida. Esto nos
permite optimizar los recursos del sistema. Los hilos de usuario son flexibles en la
calendarizacin de un proceso en su
espacio de usuario
5 FORMA DE UTILIZACIN
En un lenguaje de alto nivel, las variables 7 DESVENTAJAS
globales son compartidas por todos los hilos
del programa, es decir, los hilos leen y Los hilos, al compartir la memoria y los
escriben en las mismas posiciones de recursos, su programacin suele ser
memoria. El programador es el responsable ms complicada y se necesita ser ms
de emplear los mecanismos de sincronizacin cuidadoso.
de la librera de hilos proporcionada por el En los hilos de usuario si se intenta
lenguaje para garantizar que la memoria bloquear una llamada al sistema se
compartida se acceda de forma correcta por pueden detener todos los hilos de un
los hilos. proceso y no hay verdadero
paralelismo sin apoyo por parte del hilo
Un cambio de contexto en un hilo o del kernel.
proceso es la ejecucin de una rutina de un En los hilos de usuario hay una barrera
sistema operativo multitarea que para la de informacin entre las libreras y el
ejecucin de otro hilo o proceso en favor de kernel de manera que un hilo con un
uno distinto. cierre de exclusin mutua(para limitar
6 VENTAJAS el acceso a recursos cuando hay
mltiples hilos) o un hilo de alta
Los hilos son ms ligeros que los prioridad pueden verse excluidos por el
procesos, debido a que para estos calendarizador del kernel.
ltimos se necesita crear una copia de
toda la memoria del programa. En los hilos de usuario no hay
El tiempo de respuesta disminuye interrupciones de reloj para los hilos y
debido a que el programa puede en Java su horario depende de la
seguir ejecutndose inclusive si una de implementacin.
sus partes est bloqueada.
Permite aprovechar al mximo el
hardware disponible, debido a que 8 IMPLEMENTACIN
hilos de un mismo proceso ejecutan
diferentes CPUs a la vez. Definicin de kernel: Se refiere al ncleo, es la
Los hilos comparten memoria y parte ms esencial de un sistema operativo,
recursos del proceso al que este provee los servicios ms bsicos del
pertenecen, por ende se pueden tener sistema. Se encarga de gestionar los
varios hilos de ejecucin dentro del recursos, como el acceso seguro al hardware
mismo espacio de direcciones. de la computadora.
Se incrementa el rendimiento al
trabajar en computaciones diferentes Se encarga adems del multiplexado,
al mismo tiempo en una arquitectura determinando qu programa accede a un
multi-ncleo. determinado hardware si es requerido por mas
de uno a la vez.

2
ITCR. Aguilar, Murillo,Espinoza , . Hilos en C y Python
.

A su vez el kernel ofrece una serie de


abstracciones del hardware, para que los Los recursos de hardware, como los ncleos
programadores no tengan que acceder en un sistema multi-ncleo, son manejados
directamente, pues es una tarea complicada. por el kernel. Mediante las llamadas al
sistema el kernel provee una interfaz de
9 HILOS A NIVEL DE USUARIO programacin que son usadas por las
libreras, que a su vez proveen de una capa
El kernel desconoce de la existencia de los de abstraccin o interfaz a las aplicaciones de
hilos, este tipo de hilos se logran mediante usuarios.
libreras las cuales, ofrecen funciones para la
creacin, sincronizacin y planificacin de 11 NIVEL DE ABSTRACCIN
estos.
Por medio de sistemas operativos se puede
Debido a que no se involucra al kernel las disear un sistema que maximice el
operaciones sobre los hilos se realizan de una rendimiento de ejecucin o rendimiento en
manera ms rpida y la librera acta como un una rea computacional especfica . Por
pequeo kernel que controla los hilos en ejemplo un sistema operativo ReconOS es
ejecucin. diseado especficamente para la
programacin entorno al multi-hilo y as logra
Una desventaja importante que presenta funcionar ms eficientemente en dispositivos
este tipo de hilo es, que si se realiza una con hardware reconfigurable y ejecutar mejor
llamada bloqueante, se bloquearn todos los el software en este entorno. Es decir al
hilos del proceso a menos que se utilice una disear un sistema desde un componente tan
tcnica para prever estas llamadas bsico como los hilos se logra usar el
bloqueantes; adems no se le saca provecho hardware disponible con eficiencia muy alta.
al multiprocesamiento
Otro ejemplo de como usar hilos en un
10 HILOS A NIVEL DE KERNEL sistema abstracto como lo es un sistema
eventos y finalmente es donde son destruidos. operativo es que se puede simular e
Los programas multi-hilo usan las funciones implementar exitosamente el paralelismo en
de libreras y extensiones de lenguaje para un multiprocesador con memoria compartida
manejar hilos los cuales proveen diferentes simplemente con una buena programacin de
niveles de abstraccin ms all del los hilos.
El ncleo (kernel) es el que gestiona los hilos,
no existe cdigo de gestin de hilos, slo se
encuentra la interfaz para acceder a las Como ejemplo de la pgina de ReconOS:
utilidades del kernel, adems el ncleo
mantiene toda la informacin de los hilos y "The ReconOS operating system for
realiza la planificacin de los mismos. reconfigurable computing offers a unified
multithreaded programming model and OS
Este tipo de hilo provee muchas ventajas, por services for threads executing in software and
ejemplo varios hilos de un mismo proceso se threads mapped to reconfigurable hardware.
pueden planificar para correr en diferentes By semantically integrating hardware
procesadores, adems si se bloquea un hilo, accelerators into a standard OS environment,
se logra planificar otro hilo del mismo proceso. ReconOS allows for rapid design-space
exploration, supports a structured application
development process, and improves the
En sntesis en el kernel se crean los hilos, se portability of applications between different
los calendariza para ejecutarse, se les cambia reconfigurable computing systems."
de contexto, se les pone en pausa esperando
Kernel.
12 DIRECTIVAS

3
ITCR. Aguilar, Murillo,Espinoza , . Hilos en C y Python
.

Una directiva de compilador o pragma de En Python existen las directivas from


compilador es una construccin en el lenguaje __future__ import feature , la cual cambia
de programacin que dicta como el caractersticas del lenguaje; y la directiva
ensamblador o el interprete debe ejecutar las coding que especifica la codificacin de de un
entradas que se le dan. No son partes del cdigo fuente.
lenguaje en s sino pueden ser formas de
ejecucin desde la lnea de comandos o bien, Ejemplos:
pueden ser ejecutadas por un preprocesador.
from __future__ import division print
Las directivas pueden afectar a todo el 8/7 # prints 1.1428571428571428 print
programa o a una parte nada ms. 8//7 # prints 1
De acuerdo a la directiva esta puede ser vista # -*- coding: <encoding-name> -*-
como una sugerencia o una orden obligatoria.
# vim:fileencoding=<encoding-name>
En C y C++ lneas como #define e #include
se les conoce como directivas de
preprocesador. La directiva #pragma es 13 CREACIN DE HILOS EN C
utilizada para instruir al compilador para
utilizar caractersticas que dependen de la Se debe crear MAX_THREAD threads que
implementacin. Dos notables ejemplos de muestra por pantalla una cadena y su
esta directiva en C son OpenMP y OpenACC. identificador. Una vez que termina la ejecucin
devuelve este ltimo como resultado.
Ejemplo en C de OpenMP
#include <pthread.h>

#include <omp.h> #include <stdio.h>


#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>

int main (int argc, char *argv[]) { #define MAX_THREADS 10


int th_id, nthreads;
#pragma omp parallel private(th_id) pthread_t tabla_thr[MAX_THREADS];
{ Tabla con los identificadores de los
th_id = omp_get_thread_num(); threads.
printf("Hello World from thread %d\n",
typedef struct
th_id);
Tipo de datos y
#pragma omp barrier
tabla con los parmetros.
if ( th_id == 0 ) {
nthreads = omp_get_num_threads(); {
printf("There are %d
threads\n",nthreads); int id;
}
} char *cadena;
return EXIT_SUCCESS;
} } thr_param_t;

thr_param_t param[MAX_THREADS];
Ejemplo en C de OpenACC
Se debe crear una tabla para los parmetros
#pragma acc parallel debido a que se pasaron por referencia. As, si
#pragma acc kernels solo se tuviese una variable para los
parmetros, al modificar esta se modificara
todas las que haban pasado anteriormente

4
ITCR. Aguilar, Murillo,Espinoza , . Hilos en C y Python
.

porque los threads no se quedan con el valor res=(int *)r;


sino con la direccin.
printf("El thread %d devolvio el valor %d\n", i,
Funcin que ejecutan los threads: *res);

void * funcion_thr(void *p) }

{ printf("Todos los threads finalizados.


Adios!\n");
thr_param_t *datos;
system("PAUSE");
datos= (thr_param_t *)p;
return 0;
printf("%s %d\n", datos->cadena, datos->id);
}
pthread_exit(&(datos->id)); //una vez
terminamos, devolvemos el valor 14 PROGRAMACIN DE HILOS EN
PYTHON
}

int main(void) Como se muestra en el ejemplo, primero se


debe importar el paquete threading y luego
{ crear una clase que herede threading: Thread.
Si queremos que esta clase tenga un
int i, *res; constructor propio se deber invocar tambin
al constructor de Thread. Esto se logra de la
void * r; siguiente manera: Thread.__init__(self).

printf("Creando threads...\n"); Dentro de la clase se escribe el mtodo run y


dentro de l se coloca el cdigo que se desea
for (i=0; i<MAX_THREADS; i++) que el hilo ejecute. Luego se inicia un objeto
con la clase y para que empiece a ejecutar
{ solamente se debe invocar al mtodo start
del objeto.
param[i].cadena="Hola, soy el thread";

param[i].id= i;
#!/usr/bin/python
pthread_create(&tabla_thr[i],NULL,funcion_thr,
# Nombre de Fichero : hilo.py
(void*)&param[i]);
import threading
}
from time import sleep

Programacin concurrente:
class Hilo(threading.Thread):
printf("Threads creados. Esperando que
terminen...\n"); def __init__(self, id):

for (i=0; i<MAX_THREADS; i++) threading.Thread.__init__(self)

{ self.id = id

pthread_join(tabla_thr[i],&r);
def run(self):

5
ITCR. Aguilar, Murillo,Espinoza , . Hilos en C y Python
.

sleep(3-self.id) [7]Anon, (2016). [online] Available at:


http://www.openacc.org/sites/default/files/OpenAC
print "Yo soy %s la variable d tiene el valor C%202%200.pdf[Accessed 22 Aug. 2016].
%s"%(self.id,d)
[8]Anon, (2016). [online] Available at:
http://www.aw-bc.com/info/nutt/pdfs/nutt3e_ch6.pdf
[Accessed 23 Aug. 2016].
d=1;
[9]Anon, (2016). [online] Available at:
hilos = [Hilo(1), http://ldc.usb.ve/~yudith/docencia/ci-
3825/ClaseThreads.pdf[Accessed 23 Aug. 2016].
Hilo(2),
[10]Anon, (2016). [online] Available at:
Hilo(3)] https://www.fdi.ucm.es/profesor/fpeinado/courses/o
op/LPS-17Hilos.pdf [Accessed 23 Aug. 2016].

for h in hilos: [11]Anon, (2016). [online] Available at:


https://www.fing.edu.uy/tecnoinf/mvd/cursos/so/mat
h.start() erial/teo/so05-hilos.pdf [Accessed 23 Aug. 2016].

[12]Anon, (2016). [online] Available at:


15 BIBLIOGRAFA https://cherekas88.files.wordpress.com/2009/1
[1] Docs.python.org. (2016). 28.11. __future__ 2/parte_ii-hilos_poxi_1_.pdf [Accessed 23 Aug.
Future statement definitions Python 2.7.12 2016].
documentation. [online] Available at:
https://docs.python.org/2/library/__future__.html
[Accessed 22 Aug. 2016].

[2] Openmp.org. (2016). OpenMP.org OpenMP


Compilers. [online] Available
at:http://openmp.org/wp/openmp-compilers/
[Accessed 22 Aug. 2016].

[3] Reconos.de. (2016). ReconOS - Operating


System for Reconfigurable Computing. [online]
Available at:http://www.reconos.de/ [Accessed 23
Aug. 2016].

[4] Stackoverflow.com. (2016). Correct way to


define Python source code encoding. [online]
Available
at:http://stackoverflow.com/questions/728891/corre
ct-way-to-define-python-source-code-
encoding[Accessed 22 Aug. 2016].

[5] tecnologa, D. (2016). Definicin de Kernel.


[online] Alegsa.com.ar. Available
at:http://www.alegsa.com.ar/Dic/kernel.php
[Accessed 23 Aug. 2016].

[6]Victorpando.blogspot.com.
(2016).Conocimientos y Experiencias:
Programacin de Threads con Python. [online]
Available at:
http://victorpando.blogspot.com/2008/12/programa
cin-de-threads-con-python.html [Accessed 23 Aug.
2016].

Você também pode gostar