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