37

En nuestra entrada anterior del blog, estuvimos hablando un poco de los sistemas multitareas. Vimos que para desarrollar este tipo de sistemas es necesario utilizar los Threads o hilos. En nuestra nueva entrada de blog, hablaremos un poco más sobre estos hilos y sus aplicaciones.

Para ello te comparto el siguiente artículo:

Para entender el procesamiento por hilos, lo primero que te sugiero es que revises el concepto de pila de ejecución (Stack), como sabes las aplicaciones de software son instrucciones interpretadas por el CPU y ejecutadas de manera secuencial por el mismo, dentro de lo que llamamos la pila, esas instrucciones son tomadas directamente de los métodos que codificaste en las clases y que son invocados en la aplicación.

Esto puede verse como si estuvieras en un banco donde hay un solo cajero atendiendo todas las transacciones, te puedes imaginar la cantidad de tiempo que le tomaría si en ese banco llegaran más de 100 personas, ¿Entonces que hacen?, normalmente en software se crea una ejecución concurrente (dar pequeños cantidad de tiempo para atender a más de uno a la ves) esto lo que hace es que se aparente que se haga en paralelo, supón que a cada cliente le dedican una fracción muy pequeña de tiempo (con un super cajero) , pero claro en esa fracción se realizan “n” tareas, entonces habrá mejor eficiencia en la atención, sin embargo cuando la carga de clientes es mayor, entonces no es suficiente y se recurre a poner mas super cajeros, gerentes y una que otra host (a veces le ponen una tele para persuadir el retraso – en las aplicaciones de software existe el famoso circulito que es completándose o algo que se mueva).

Así mismo para las aplicaciones de software, en el caso de Java el manejo de hilos se traduce a la creación de varias pilas de ejecución (según sean el número de threads) los cuales tienen independencia uno de otro y que ello puede llevar a una ejecución en paralelo siempre y cuando tengas varios procesadores (sino solo está trabajando en forma concurrente), de ahí que servidores sean multi-procesadores, tomando esta ventaja los servidores pueden atender millones de peticiones.

Aplicaciones Reales con Hilos, hay un sin número de ellos, por ejemplo como crees que trabaja tu MP3, la ejecución de Voz por IP, reproducción de video, La aplicaciones bancarias, incluso no vayamos tan lejos, el refrigerador de tu casa, el radio, la televisión etc… mucho de ello trabaja con sistemas o sub-sistemas haciendo tareas en paralelo y coordinándose para proveer el servicio al usuario cual es la parte interesante del manejo de hilos, bueno cuando tienes recursos compartidos tienes que implementar o utilizar los esquemas de bloqueo(Semáforos) y sincronización es ahí donde está el arte de programar con hilos ya que de no hacerlo bien puedes crear un sistema totalmente ineficiente o inútil, ejemplo aplicaciones que tardan horas en procesar los servicios o que se bloquean y que intercambian los datos equivocadamente.

Por ello hay que revisar bien los esquemas y que es lo que se quiere lograr, diseñar con grafos puede ayudarte a verificar las dependencias a recursos compartidos.

En el caso de las aplicaciones WEB, generalmente el uso de procesos en paralelo esta coordinado por los contenedores y los programadores ya no tienen que preocuparse mucho por dicha coordinación, excepto en casos muy especiales.

¿Qué aplicación tienes en mente?,  es muy seguro que utiliza hilos para su solución”.

Como puedes observar, el uso de hilos en nuestros programas es muy común. Y aquí se habló de un proceso muy importante entre hilos que es la sincronización. Dicho tema también lo tocaremos en nuestra  siguiente sesión.

Bibliografía

Israel-69. (11 de 11 de 2010). JavaMéxico. Obtenido de http://www.javamexico.org/blogs/irr3v3rsible/aplicaciones_reales_de_los_hilos_thread