Understanding Threads in Operating Systems

Andres Segreda www.youtube.com

Breve Resumen

Este video explica los procesos ligeros (hilos) en sistemas operativos modernos, contrastándolos con los procesos tradicionales. Se discuten los diferentes enfoques de concurrencia (uniproceso/unihilo, multiproceso/unihilo, uniproceso/multihilo, y multiproceso/multihilo), las ventajas de los hilos (creación y terminación más rápidas, comunicación eficiente), y los tipos de hilos (ULT y KLT), junto con sus implicaciones en el rendimiento y la arquitectura de aplicaciones.

  • Los hilos comparten recursos del proceso al que pertenecen, lo que facilita la comunicación y el uso compartido de recursos.
  • Existen dos tipos principales de hilos: los de nivel de usuario (ULT) y los de nivel de kernel (KLT), cada uno con sus propias ventajas y desventajas en términos de velocidad y soporte del sistema operativo.
  • La elección entre ULT, KLT y multiproceso depende de los requisitos de la aplicación y las capacidades del sistema operativo.

Introducción a los Procesos Ligeros (Hilos)

Se introduce el concepto de procesos ligeros, también conocidos como hilos, y se establece la necesidad de comprender primero los fundamentos de los procesos. Se recuerda que cada proceso tiene su propio espacio de memoria aislado y protegido por el sistema operativo, lo que impide que un proceso acceda a la memoria de otro. A diferencia de los procesos, los hilos comparten los recursos del proceso al que pertenecen, incluyendo el espacio de memoria y la calendarización.

Diferencias Clave entre Procesos e Hilos

Se explica que los hilos no tienen su propio espacio de memoria ni calendarización, sino que utilizan los del proceso al que pertenecen. Esto permite que los hilos dentro del mismo proceso accedan a la información de otros hilos de manera más sencilla, ya que comparten la misma protección de memoria. Sin embargo, la comunicación entre procesos independientes requiere mecanismos adicionales proporcionados por el sistema operativo. La principal diferencia radica en que los hilos utilizan los recursos del proceso, mientras que los procesos tienen sus propios recursos.

Tipos de Aplicaciones y Enfoques de Concurrencia

Se describen cuatro tipos de aplicaciones según su enfoque de concurrencia: un proceso con un hilo (lo más básico), múltiples procesos con un hilo cada uno (multitarea básica), un proceso con múltiples hilos (concurrencia dentro de un proceso), y múltiples procesos con múltiples hilos cada uno (enfoque moderno para eficiencia y concurrencia). Se destaca que el enfoque multihilo/multiproceso es el más utilizado actualmente, ya que permite aprovechar la concurrencia y el "time sharing" de manera eficiente.

Estados de un Hilo y Ventajas sobre Procesos

Se mencionan los tres estados básicos de un hilo: corriendo, listo y bloqueado. Se explican las ventajas de los hilos sobre los procesos, como la creación y terminación más rápidas, y la conmutación más eficiente entre hilos dentro del mismo proceso. Esto se debe a que los hilos no requieren la asignación y liberación de recursos por parte del sistema operativo, lo que los hace más rápidos y eficientes.

Eficiencia y Comunicación entre Hilos

Se profundiza en las mejoras que ofrecen los hilos, como la comunicación más rápida entre hilos del mismo proceso al compartir memoria, la programación modular más sencilla y la capacidad de realizar trabajos concurrentes en primer y segundo plano. Se ejemplifica con el caso de JavaScript en HTML, donde el uso de hilos (web workers) permite realizar procesos intensos sin bloquear el hilo principal de renderizado.

Relación entre Hilos y Procesos: Dependencia y Afectación

Se explica que los cambios de estado de un proceso afectan a sus hilos, ya que los hilos corren dentro del proceso. Si un proceso termina o se suspende, sus hilos también terminan o se suspenden. Se introduce la existencia de dos tipos de hilos (ULT y KLT) y se menciona que el bloqueo de un hilo puede afectar al proceso, dependiendo del tipo de hilo y la implementación del sistema operativo.

Multihilo y Llamadas a Procedimientos Remotos

Se ilustra cómo el multihilo puede mejorar la eficiencia en situaciones de llamadas a procedimientos remotos (ej., consultas a bases de datos). En lugar de esperar a que una llamada bloqueante termine, se pueden utilizar múltiples hilos para realizar varias llamadas concurrentemente, mejorando el rendimiento general del sistema. Se introduce la necesidad de mecanismos de sincronización (semáforos, monitores) para gestionar el acceso a recursos compartidos y prevenir problemas de concurrencia como "deadlocks" y "condiciones de carrera".

Tipos de Hilos: User Level Threads (ULT) vs. Kernel Level Threads (KLT)

Se explican los dos tipos principales de hilos: los hilos de nivel de usuario (ULT) y los hilos de nivel de kernel (KLT). Los ULT son manejados por la aplicación y pueden correr en cualquier sistema operativo, pero si un hilo ULT se bloquea, todo el proceso se bloquea. Los KLT son manejados por el sistema operativo y requieren que el sistema operativo tenga la capacidad de implementarlos. Los KLT permiten que un proceso continúe ejecutándose aunque uno de sus hilos esté bloqueado.

User Level Threads (ULT): Características y Desventajas

Se detalla que con ULT, la biblioteca de hilos corre dentro del proceso, y el sistema operativo no tiene conocimiento de los hilos individuales. Esto significa que si un hilo se bloquea, todo el proceso se bloquea, limitando la concurrencia a nivel de lógica y no permitiendo aprovechar la concurrencia cuando un recurso está ocupado.

Jacketing: Solución para Llamadas Bloqueantes en ULT

Se introduce el "jacketing" como una técnica para solventar el problema de las llamadas bloqueantes en ULT en sistemas operativos que no soportan KLT. El "jacketing" consiste en convertir una llamada bloqueante en un hilo ULT en un proceso aparte, de modo que si esa llamada se bloquea, solo se bloquea ese proceso y no el proceso principal.

Kernel Level Threads (KLT): Características y Consideraciones

Se explica que con KLT, los hilos corren en el lado del kernel, y la calendarización es manejada por el sistema operativo. Esto permite que el sistema operativo sepa qué hilo está bloqueado y pueda seguir ejecutando otros hilos del mismo proceso. Aunque los KLT son más inteligentes, también son un poco más lentos que los ULT debido a la interacción con el sistema operativo. Se destaca que la elección entre ULT y KLT depende de las capacidades del sistema operativo y los requisitos de la aplicación.

ULT vs KLT vs Procesos: Rendimiento y Decisiones de Diseño

Se resume que los ULT son los más rápidos, seguidos por los KLT, y los procesos son los más lentos. Se enfatiza la importancia de combinar estas técnicas de manera inteligente en una aplicación bien desarrollada, utilizando ULT cuando sea posible, KLT para llamadas bloqueantes si el sistema operativo lo permite, y procesos solo cuando sea necesario.

Aplicaciones que se Benefician del Multiproceso

Se mencionan ejemplos de aplicaciones que se benefician del multiproceso, como el renderizado de video, simulaciones intensivas, servidores web con múltiples clientes simultáneos y aplicaciones Java. Se destaca la importancia de configurar adecuadamente la concurrencia en servidores web para manejar un gran número de usuarios simultáneamente.

Resumen y Conclusiones

Se resume que los hilos en los sistemas operativos modernos permiten crear procesos más rápidos y eficientes, facilitando el "time sharing" y mejorando la experiencia del usuario. La combinación inteligente de ULT, KLT y multiproceso, junto con un buen diseño de concurrencia, permite crear aplicaciones escalables y eficientes que pueden soportar un gran número de usuarios y procesos simultáneamente.

Summarize any YouTube video in seconds

Get summaries like this one for any video, in your language, with the free Summ app.

Download on the App Store
Get it on Google Play

Transcript

YouTube Transcript Generator

0:00 buenas estudiantes el tema de la semana Tratará sobre un concepto que ya más o menos hemos visto que son procesos pero una versión especial de ellos que son los procesos ligeros o también llamados hilos entonces para poder entender que es un proceso ligero primero necesitamos volver a sentar las bases de qué era un proceso de cosas importantes y fundamentales de cualquier proceso esto como lo vimos en el video anterior vimos que cada proceso tenía un espacio de memoria en donde cuando se creaba una de las cosas que haía el sistema operativo era ir a buscar ese espacio donde lo iba a ubicar en la memoria principal crearle las páginas asociadas a él luego le iba a poner en la fila de ready si ya había campo y entonces iba a estar en ready running eh protegido casi se bloqueaba y

0:47 el proceso iba a tener todos estos estados que vimos durante el video pasado adicionalmente a esto vimos que una de las responsabilidades que tenía el sistema operativo era evitar que este proceso accediera a la memoria de otros procesos pero a la vez que el proceso pudiera o tuviera aislado y protegido lo que sucedía dentro de él de hecho no sé si recuerdan el ejemplo que les decía que yo podía abrir dos notepads verdad o dos words empezar a escribir en uno y eso no implicaba que o De hecho no sucedía que se iba a poder escribir en el otro Word y esto Gracias a la protección que tenían los procesos que el sistema operativo le da a los procesos entonces así como el proceso tiene todos sus recursos La idea es que el proceso ligero o el también llamado

1:34 hilo va a compartir estos recursos con el proceso y por eso es que es un proceso ligero porque él no tiene su propia calendarización no tiene su propio espacio de memoria y ni siquiera tiene su propia protección sino que es como un digamos parásito dentro del proceso o sea el proceso ligero corre como parte del proceso y Por ende el espacio en memoria a que le pertenece al proceso los tiempos de calendarización Y eso lo vamos a ver después porque ha dos tipos de hilos pero A quién a quién le pertenecen al proceso eh la protección eh Para que otros procesos no puedan entrar a quién le pertenece al proceso evidentemente al compartir el mismo espacio de memoria entonces un proceso

2:22 ligero o sea un hilo Puede acceder a información de otro hilo que esté en el mismo espacio de memoria de una manera más pequeña O sea si dos hos de un mismo proceso quieren hablar entre ellos eso va a ser sers sencillo porque están dentro de la misma protección de memoria que tiene el sistema operativo Pero si yo quisiera hablar eh del proceso A al proceso B que ya no son procesos ligeros sino procesos completamente independientes Pues el sistema operativo tiene que proveerme de otros mecanismos con el que yo pueda o esos procesos se puedan comunicar Esta es la principal diferencia que hay con un proceso y es realmente su definición repito el proceso ligero o sea el hilo no tiene

3:10 sus propios recursos sino que más bien Usa los recursos del proceso al que pertenece ya incluyendo lo que significa el hilo y diferenciando con los procesos nos crean cuatro tipos de aplicaciones o de enfoque que se pueden tener esto tanto a nivel de sistema operativo como perede la aplicación la más básica y la más corriente es cuando tenemos un solo proceso un solo hilo aquí es lo normal que habíamos hecho en el curso de de oac en ensamblador donde solo podíamos correr una cosa a la vez y si nos recordábamos poníamos nuestro programa y mientras tanto no se podía hacer nada en la maquinita virtual del dosbox esto es porque un proceso un solo hilo aquí no había una distinción entre Qué es un proceso un hilo después empezaron a

3:58 salir las las opción o el enfoque de que tuviéramos varios procesos pero cada proceso tenía un solo hilo Qué quiere decir esto el sistema operativo ya nos metía a lo que era multibat o el Time sharing Y en este momento yo ya podía tener varias aplicaciones o varios procesos corriendo pero cada uno con su hilo que es lo que hemos hablado hasta el momento Entonces un proceso Perdón varios procesos pero cada proceso con un hilo acá en este enfoque de un single thread todavía no ten tenemos la capacidad para poder utilizar varios hilos dentro de un solo proceso pero ya aquí podemos tener concurrencia sin embargo eh Hay otro enfoque que es que

4:44 yo puedo hacer mis programas que tengan más bien varios hilos entonces solo creo un proceso solo pido un espacio de memoria Solo tengo una calendarización pero yo puedo crear varios hilos para que mi programa o mi proceso pueda ejecutarse eh ciertas funciones o ciertas lógicas de manera concurrente y por supuesto tenemos la versión que es multi multiproceso donde dependiendo de lo que quiera hacer y vamos a ver algo que se llama jacketing más adelante puedo convertir una llamada que va a ser bloqueante en un proceso o puedo tener eh varios hilos por velocidad y mi Sistema o mi programa puede estar entonces hecho de varios procesos que a su vez cada proceso puede tener varios

5:29 hilos Y ese es el enfoque de multihilo multiprocesos que es lo que normalmente ya hoy en las aplicaciones es lo que se utiliza porque me permite trabajar con la eficiencia la concurrencia y sobre todo la promesa del Time sharing también que es cómo siente el usuario e que se le responde el lo lo que él está esperando así un hilo o un proceso ligero tiene tres estados básicos que puede tener corriendo si está listo y si está bloqueado lo mismo que habíamos hablado para el caso de los procesos pero si se dan cuenta aquí lo dejamos un poquito más simple Simplemente ya corre está

6:14 listo y está bloqueado entonces gracias a la principal diferencia de un proceso en hilo que era que el hilo no tiene sus propios recursos va a tener ciertas ventajas sobre un proceso por ejemplo el tiempo de creón obviamente va a ser más rápido por qué Porque en el hilo no tiene que ir a preguntar el sistema operativo que si tiene espacio que es le ubique una porción que en dónde cabe que Cuáles son las páginas que voy a usar que estas son las tablas de memoria las tablas de archivos que se le van asignar No eso le perteneció al proceso Y ese esa funcionalidad o ese lógica se desarrolló para el proceso no se desarrolló para el hilo esto lo hace ser mucho más rápido lo mismo ocurre cuando

7:00 se va a terminar cuando se va a terminar es muchísimo más rápido por qué Porque no tengo que devolver la memoria no tengo que devolver las tablas no tengo que eh interactuar con el sistema operativo para yo lograr hacer cualquiera de estas operaciones que se habían hecho durante la creación y Por ende la terminación es prácticamente decir termine y listo cambiar entre entre hilos es mucho más rápido siempre y cuando el hilo esté en el mismo proceso porque ya no depende del patcher verdad del sistema operativo que le va diciendo ahora usted ahora usted ahora usted sino que ya depende la calendarización propia del proceso y entonces eh No tiene que esperarse en toda la fila sino solo en su espacio y cambiar de un hilo al otro es una operación intrínseca al proceso lo cual

7:47 lo hace muchísimo más rápido adicionalmente aparte de estas velocidades que ganamos evidentemente tenemos otras mejoras por ejemplo les les comentaba ahorita que todo el tema de cómo se comunican los hilos del mismo proceso es mucho más rápido porque están compartiendo la memoria es prácticamente como que ven lo mismo y por otro lado compartir recursos que ellos estén usando Pues también es más sencillo Porque ese recurso ya está asignado al proceso no al hilo entonces que por poner un ejemplo este archivo lo tiene abierto este proceso los dos hilos tienen acceso entonces a ese archivo eso también nos puede traer una serie de problemas de write After read write after read read after wr pero en resumen es un poco más sencillo lograr

8:33 intercambiar eh información ya sea mediante comunicación o recursos compartidos porque le pertenecen al proceso y ellos simplemente los están utilizando entonces repitiendo lo que acaba de comentar son más eficientes porque es más rápido la creación la terminación y el intercambio la conmutación entre procesos va a tener una comunicación más eficiente entre o los del mismo proceso utilizar la misma memoria Esto va a permitir que los programas sean más modulares yo puedo tener un módulo corriendo en un hilo y otro módulo corriendo en otro hilo eh en diferentes caminos de ejecución esto nos permite la programación modular de una manera más sencilla y también nos permite tener entonces trabajos concurrentes tanto en

9:19 la primer plano como en el segundo plano lo cual va a aumentar muchísimo la experiencia de usuario y cómo sentimos que estas nos están respondiendo Por ejemplo si el hilo principal en javascript que es en html se bloquea nosotros vamos a ver que toda la página se bloquea gracias a unas técnicas que comentaremos más adelante podemos hacer que una página pueda estar desarrollando llamado con worklet pueden estar desarrollando web workers e desarrollando procesos intensos sin bloquear el hilo principal que es el hilo del renderizado el hilo que pinta las páginas y esto lo logramos gracias a los hilos y como un hilo es parte del proceso corre dentro del proceso evidentemente

10:06 los cambios de estados de este proceso van a afectar a los cambios de estado de el hilo del proceso ligero Por ejemplo si el proceso termina el hilo pues va a morir porque todo el espacio que estaba asignado al proceso donde era parásito el hilo se ha devuelto el sistema operativo Lo mismo sucede si se suspende si el proceso se ha suspendido Pues todos los hilos que estén en él se van a devolver a el proceso al sistema operativo incluso esto nos puede pasar a nivel de bloqueo vamos a ver que existen dos tipos de vilos El ult y el kt lo veremos en un par de minutos y si el hilo en el ult se bloquea si el proceso

10:51 se bloquea el hilo se bloquea si el hilo se bloquea el proceso también esta estrecha relación se debe a Just ente a que el proceso es el dueño de los recursos y el hilo simplemente está usándolos dentro de este proceso Entonces como ejemplo lo que son las llamadas a procedimientos remotos esto lo veremos mucho más a profundidad en el curso de redes Pero lo importante es que existen dos tipos de llamadas bloqueantes y no bloqueantes las llamadas normalmente de Procedimientos remotos Como por ejemplo pedir algo a la base de datos imagínense que cuando ustedes hacen la solicitud de clientes ustedes se tienen que esperar a que les devuelvan los clientes Mientras

11:37 tanto su proceso no está haciendo nada o su unidad mínima de ejecución digamos el hilo no está haciendo nada en ese momento por qué porque no tiene los clientes sobre los que él va a sacar información o realizar algo entonces tiene que esperar a que se le responda que el servidor responda esta llamada en este ejemplo podemos ver que pasa el tiempo y hay dos momentos en los que se ha bloqueado Pero si metemos el concepto de que solo usamos un único hilo por servidor Pues si o por servicio que yo esté tratando de correr pues entonces si se bloquea ese hilo automáticamente se me bloqueó el proceso yo no puedo hacer nada más tengo que esperar a que él

12:22 termine y el sistema operativo va a decir de pero si usted está esperando que le traiga clientes y clientes va a durar unos segund en devolvérselo yo no le voy a asignar más tiempo de procesador a usted mejor se lo voy a asignar a otros procesos que estén en el estado de r según lo que vimos en el video pasado Entonces se mete el concepto del multihilo en Incluso en esquemas de un único procesador O de un único proceso y qué pasa acá Bueno podemos entonces tener un contexto en donde si por ejemplo en algún momento se llegara a bloquear el hilo cuando metamos los klts pues eh yo puedo seguir ejecutando otros hilos imagínense que mi proceso tuviéramos eh Llamar a clientes pero a

13:09 la vez también tengo que hacer una llamada a otro repositorio para traerme los productos en vez de hacerlos en serie traerme los clientes y los productos por qué no me los traigo concurrentes pido de una vez el de clientes pido de una vez el de productos y mientras que en los dos servidores aparte se están resolviendo pues estos dos se van resolviendo en dos servidores aparte de manera paralela y yo no Me bloqueé no tuve que esperar a primera llamada esperar a que me respondieran y luego continuar con la segunda llamada de esta forma los hilos tienen que poder eh o para poderse sincronizar van a compartir recursos pero también van a cambiarlos a nivel del tiempo y esto implica que era lo que les comentaba más adelante de que tenemos

13:54 que tener mecanismos como lo que son los semáforos los los los eh semáforos los monitores multiplexores y veremos una serie de técnicas en el siguiente video para yo poder decir quién va a usar el recurso que eh cómo voy a sincronizar los recursos de utilización entre entre hilos y procesos para prevenir todos los problemas de la concurrencia entre ellos el deadlock y por ejemplo las condiciones carreras que es que el resultado va a depender de quién termine primero por ejemplo si yo tuviera el primer proceso que termine se tiene que dividir entre el segundo proceso que termine quiere decir que si el proceso a terminó primero que el proceso B voye tener una respuesta diferente si el

14:40 proceso B termina primero verdad porque estaría siendo digamos que la respuesta de a sea TR y la de B sea uno en uno tendría tres Y en el otro ejemplo tendría un tercio entonces acá podemos ver los dos tipos de yos que les he comentado que existen los user Level threat o como dice su nombre se usa en la capa o en el nivel de usuario y los kernel Level thread o sea está corriendo a nivel del kernel que es de lo que hemos hablado los espacios reservados en los videos anteriores Cuál es la diferencia entre un hilo ult y un hilo klt bueno el hilo ult tiene la ventaja de que puede correr en cualquier sistema operativo que exista multihilo monohilo no importa por qué porque el que lo maneja es la capa

15:27 de usuario como habíamos lado Esta es la aplicación ya no está a nivel del sistema operativo así que ya no importa el sistema operativo sino que yo como proceso puedo tener mi propia lógica de dispatcher como simulando el sistema operativo y entonces yo soy el que he decidido en el ticket un haga esto en el ticket 2 haga esto el la misma aplicación guarda la información y guarda todo lo que necesite lo maneja a desconocimiento total del proceso entonces todo estaría corriendo toda la lógica del hilo Que guarde que le toca a usted que comparta recursos lo estaría manejando la aplicación y no sería de conocimiento del sistema operativo Por ende si alguno de estos hilos se

16:15 bloquea va a implicar que el proceso se bloquee porque el sistema operativo no sabe de que existe ese hilo el sistema operativo lo único que sabe es que hay un proceso corriendo y el proceso dice Ah yo estoy esperando a que me devuelvan cierta información de la base de datos Okay lo bloqueo proceso pero yo tenía cco hilos No no tengo forma como proceso de saber que mi proceso tenía hilos adentro Yo solo sé que se bloqueó y se bloquea el proceso completo Entonces tenemos los que son los kern Level thre que es una evolución de esos donde el sistema operativo si tiene que tener la capacidad de tener implementado el kt o sea estos solo van a funcionar en ciertos sistemas operativos hoy por hoy son la mayoría y es porque la

17:04 calendarización O sea ya el recurso si sigue perteneciendo de memoria y demás al proceso Pero cuando me toca a mí ejecutarse le corresponde al sistema operativo de esta forma si el sistema operativo se da cuenta de que un hilo se bloquea Pero a ese proceso le siguen quedando más hilos él dice no lo que está bloqueado es el hilo y no el proceso y de esta forma el sistema operativo puede dejar de que este hilo siga funcionando mientras que se está esperando la lista de usuarios pero no lo bloquea para que pueda pedir también la lista de clientes Ahora si todos los hilos de un proceso están bloqueados el proceso entonces pasa a estar bloqueado y de esta manera Este es un poco más inteligente pero también un

17:51 poco más lento Que ultt pero necesita que el sistema operativo tenga las capacidades para poder ejecutar Hilos de tipo kt porque corre en el K como ven acá Ese es el enfoque que utiliza eh Windows entonces otra vez cuando estamos en un hilo ult vemos que la librería o la biblioteca de hilos está corriendo dentro del proceso aquí el proceso a el proceso B eso también del libro y podemos ver qué pasa de estado listo corriendo y bloqueado cuando está corriendo el proceso cuando está listo es porque en la librería o la biblioteca que yo estoy usando me dio a mí hilo le dio digamos aquí el hilo uno que corra

18:38 pero ya el sistema operativo le había dado a todo el proceso el sistema operativo le dijo proceso uno corre usted y el proceso un dijo Ah voy a correr el hilo uno voy a correr el hilo dos o voy a correr el proceso el el hilo dos de esta forma eh cuando se bloquea Pues bueno se bloquea el hilo pero se bloquea todo el proceso Entonces esta es la gran desventaja que tiene un hilo ultt que al final esta ventaja de los hilos de que si se bloqueaba el proceso yo podía hacer otras cosas pues no me funciona tanto y la concurrencia viene nada más a nivel de lógica lo cual implica también que si solo es a nivel de lógica muchas veces e donde yo quería aprovechar la concurrencia era porque un recurso

19:24 estaba ocupado y ahora el este recurso Igual me está bloqueando al proceso completo entonces a pesar de que vamos a ver que en muchas ocasiones por ejemplo lenguajes como erland lo utilizan y hacen que sean suficientes y super rápidos no tiene esta desventaja importante y por eso es que se crea el klt o una técnica llamada jacketing el jacketing es la forma en que venimos a solventar este proceso de llamadas eh ult bloqueantes en sistemas operativos que no tienen la capacidad para ejecutar eh hilos klts o kernel Level Trade qué es lo que se hace Bueno yo digo Uy Esta es una llamada ult y hace una llamada o un hilo ult y va a

20:11 hacer una llamada a la base de datos en vez de tener un enfoque de multihilo para esa llamada yo tengo un enfoque ahí de multiproceso convierto Esa llamada bloqueante que tengo en el hilo ult y que no la puedo convertir en un klt y la convierto en un proceso parte de esta forma ese flujo ese camino de ejecución si se bloquea solo va a bloquearse el proceso al que pertenece el programa verdad porque al final es un programa pero se bloquea solo ese proceso y no bloquea el proceso principal Recuerden que si se bloqueaba el hilo se bloqueaba todo entonces lo que hicimos fue separar del hilo ult la llamada que podía ser bloqueante y la convertimos en un proceso aparte A

20:56 eso le llamamos jacketing ahora sí tenemos los klts como vemos ahora los hilos están corriendo en el lado del kernel como les decía los hilos Aunque corren en el mismo espacio del procesador la calendarización es manejada por el kernel o sea el sistema operativo sabe que H lo está bloqueado el sistema operativo sabe eh si el proceso tiene hilos todavía que pueden seguirse ejecutando Y esto es una gran ventaja porque ya yo no necesito pasar a procesos llamadas bloqueantes sino que puedo usar klts para llamadas no eh para llamadas bloqueantes y no

21:44 tener que usar un proceso que es mucho más lento entonces tiene sus desventajas también primero solo va a funcionar en sistemas operativos que tengan la capacidad de soportarlo O sea no es para yo hago un programa que quiero que corr en varias circunstancias pues tengo que tomar esta consideración y segundo es un poco más caro en términos de tiempo que un hilo ult Porque aquí sí hay una interacción con el sistema operativo Entonces por ejemplo Aquí tengo unos ejemplos de que la señal en un ult son 37 microsegundos del Signal weight después vamos a hablar de esto cuando vemos el tema de semáforos mientras que en el kt son 441 microsegundos y probablemente en el proceso eso vayan a

22:29 ser en el orden Ya de los milisegundos para este ejemplo verdad porque obviamente Eso depende de la velocidad de cada compo lo que sí quería ilustrar es que es hasta 10 veces más y probablemente el proco son 10 veces más entonces qué es lo más rápido ult después de ult qué sigue porque hay un klt Y por último lo más lento es un proceso si yo puedo hacer algo en ult lo haré en ult si tengo la capacidad para AC kt y tengo una llamada bloqueante la voy a hacer en un klt Y si yo ya definitivamente Necesito una llamada bloqueante y no tengo posibilidad de usar kt la hago en un proceso porque el proceso es lo más lento el ult lo más rápido y el calet es como un punto

23:15 intermedio entre ellos de esta forma se pueden combinar estos enfoques para que logremos obtener una eficiencia máxima en sistemas operativos donde se permite si mis programas tienen una buena arquitectura y conocen Cuándo usar los user Level thread cuándo utilizar eh los klts y en qué momento yo debería utilizar multiproceso multihilo multihilo ult y multio klt con la posibilidad de que el sistema operativo lo permita que es la mayoría de hoy en día si hacemos Esto entonces lo que estaríamos logrando es hacer aplicaciones completamente eficientes esto nos va a suceder en Java y en cualquier caso lenguaje de programación Y esta es la razón más

24:02 importante de porque este esta video de hoy es superimportante para realizar arquitectura de aplicaciones saber incluso escoger si ocupa un lenguaje que soporte wts y que tenga una buena librería de wts como llan en ocasiones donde yo tenga operaciones de cómputo bastante pesadas que necesito hacer de manera concurrente y no tengo eh acceso a llamadas bloqueantes o en el caso de nojs que es un solo hilo pero que maneja ya bloqueantes a través de jacketing eh en Bueno ahora ya incon lo que son los web workers Y entonces eh Son aplicaciones que tienen un enfoque diferente y que durante el curso de aplicaciones iremos viendo de arquitectura de aplicaciones iremos viendo cómo se le saca mayor provecho entonces Cuáles son las

24:49 aplicaciones que se benefician del multiproceso bueno básicamente todas las aplicaciones con las demandas de hoy en día por ejemplo aplicaciones donde tengamos como video renderizado simulaciones que necesitan hacer diferentes operaciones bastante intensas estas son buenas candidatas para meter en multio aplicaciones donde tengamos web servers donde yo voy a tener varios clientes conectándose de manera simultánea por ejemplo una página web que tengo eh varias personas que me van a estar solicitando Pues yo incluso dentro de la configuración por ejemplo de la pache que es como el web server le tengo que poner Cuánta es la máxima concurrencia de usuarios que pueden estar simultáneamente ente ingresando porque mi sitio tiene que darles eh una conexión y esta conexión se maneja en un

25:34 proceso independiente para cada uno de ellos o en un hilo independiente del mismo proceso de ejecución por un tema de velocidad aplicaciones de Java son por excelencia eh de las más documentadas y más conocidas en el manejo de todo el tema de hilos y de semáforos que vamos a ver en un video subsiguiente y aplicaciones que corren en múltiples instancias o sea en varias computadoras Así que como resumen podemos decir que los hilos en los sistemas operativos modernos nos hacen ser más eficientes al al hecho de poder crear procesos más rápidos esos procesos más rápidos se llaman procesos ligeros y se crean de una manera más rápido se termina más rápido nos es más fácil compartir información entre ellos haciendo más

26:21 eficiente mi ejecución del programa y lo que nos va a llevar entonces a que mi aplicación responda de una manera más rápida también y que el usuario sienta que está menos pegado o que haya menos lag y esto nos va a traer también escalabilidad yo puedo entonces crecer a nivel de hilos si tengo más pues aumento yo la cantidad de hilos un ejemplo de eso es una arquitectura que veremos después que es el space base architecture lo veremos en el curso de arquitectura donde logre crece y crece y crece en cantidad de Hilos de ejecución de esta forma recordemos que combinando todas las técnicas en una aplicación bien desarrollada eh usando bien Cuál es el hilo que yo de usar Y contemplando eso en mis modelos de concurrencia que

27:06 van Obviamente el enfoque ya diseñar eso van en otros cursos pero entenderlo que es parte de este que el sistema operativo me da esas capacidades hace que mis aplicaciones sean más eficientes y puedan soportar un mayor número de usuarios simultáneos o un mayor número de procesos de manera simultánea eso sería la clase de la semana

Share

YouTube Video Summaries