Bueno y llegamos a la segunda parte de las rutinas.
Ahora vamos a ver el tema de channels que es muy interesante muy interesante hace que nuestras rutinas
este paralelismo que estamos teniendo entre ejecución de funciones tome sentido.
Los Channel son unos canales precisamente que permiten que una garrotín envía información hacia otra
función hacia Main o hacia otra garrotín para que nos permite enviar información.
Precisamente para que cada ejecución paralela que se esté desarrollando en el procesador pueda dialogar
con otra enviando información si no lo que vamos a tener son islas que no nos van a servir porque nosotros
vamos a necesitar información que se esté desarrollando y creando en una de las rutinas y sobre todo
para poder tomar el control.
Recuerden el ejercicio anterior donde la ejecución del programa terminaba de manera abrupta no importaba
si nuestra rutina terminaba o no. Y eso nos provocaba un descontrol porque no podíamos tomar el control
de la ejecución de nuestro programa.
Vamos a ver nuestro Eger 15 vamos a ir a crearlo todos estos ejercicios yo los voy a dejar para que
los puedan descargar y ya los tengan.
Por si ahora no los están copiando no se preocupen.
Al finalizar la primera sección del curso este primer gran capítulo del curso lo van a poder descargar
por qué digo esto porque seguramente este curso va a crecer y se le van a agregar más secciones mucho
más de carácter intermedio y avanzado.
Así que no se preocupen si ahora les parece que el curso les faltan algunos temas muy importante que
ustedes aprendan lo básico y lo intermedio que es lo que estamos viendo de lo que es programación y
obtengan su diploma rápidamente.
Vamos a crear nuestro Eger quinze muy bien nuestra carpeta y vamos a crear el Main.
Punto.
Vamos a copiar lo habitual.
Bueno muy bien y aquí he traído dos paquetes el FMI y el Thain que es con lo que vamos a trabajar ahora
y vamos a saber cómo crear un canal un canal en definitiva es un espacio de memoria de diálogo en el
que van a dialogar distintas rutinas y cuando se aloje un valor en ese espacio de memoria la rutina
que está pidiendo un valor a cambio va a actuar en consecuencia ese espacio de memoria es importante
entenderlo.
Ese espacio de memoria tiene que ser de un tipo de dato de un string un entero.
En definitiva nuestro canal lo que va a transportar es una variable es un tipo de dato entonces para
crear un canal vamos a poner Canal 1 vamos a usar el MEIC como lo hemos usado para crear tantas cosas
tantos objetos y estructuras y vamos a decir que lo que vamos a crear es de tipo chán de tipo Channel
canal ahora muy bien con esto solo no alcanza lo que tenemos que decirles bueno es ese canal ese espacio
en memoria donde van a dialogar de un en un sentido y en el otro tiene que ser de un tipo de dato en
este caso lo que vamos a hacer es crear un tipo de dato que pertenece al paquete Time que es Time duration
muy bien este tipo de dato lo que va a hacer es calcular lo vamos a usar para grabar el cálculo de una
diferencia entre distintos horas para saber cuanto cuantos segundos o milisegundos demoró la ejecución
de una rutina para eso lo vamos a usar muy bien ahora vamos a hacer el llamado a nuestra Routin estamos
en Main ya hemos creado nuestro canal vamos a hacer un llamado a bucle vamos a hacer un bucle y lo que
vamos a pasarle de parametro es nuestro canal le estamos pasando de parametro del canal porque le estamos
diciendo ejecuta lo que halla en la rutina bucle pero toma en cuenta que te estoy pasando un canal para
dialogar con otros con otras rutinas muy bien debajo de esto vamos a colocar un simple FME llegué hasta
aquí ahora vamos a ver por qué coloco esto.
Bueno muy bien vamos a ahora a crear nuestra función bucle nuestra función bucle que recibe Canal Uno
que es de tipo Chan yo aquí lo llamo Canal Uno lo podría llamar simplemente canal porque en realidad
aquí le doy el nombre que quiero usar dentro de bucle.
Voy a respetar el mismo nombre pero podría tener el nombre que ustedes quieran le estoy diciendo de
qué tipo de dato es Canal Uno es un Channel y además también tengo que recordarle qué tipo de Chanel
si aquí yo colocarã que es de tipo Integer String me daría un error porque lo que le estoy enviando
es un canal de tipo Thain duration y tiene que recibir un tipo de duration tan duration.
Ahora ya tengo la comunicación entre mi main y mi Buckler que es lo que vamos a hacer ahora.
Ahora vamos a crear una varilla elinicio que es de tipo time now que lo que va a hacer es grabar la
hora minuto segundo a milisegundos del momento en que entré a la rutina y vamos a hacer un favor que
vamos a inicializar una variable y en cero y vamos a iterar mientras y tenga todos estos ceros o sea
vamos a crear un bucle enorme.
Por qué.
Porque necesitamos mostrar que mientras este bucle está procesando en memoria yo voy a ir dialogando
y voy a ir mostrando mensajes en pantalla para que vean ustedes el paralelismo cómo se está produciendo
dos ejecuciones al mismo tiempo que voy a meter dentro de mí for absolutamente nada.
No voy a hacer nada simplemente Quiteria y que vaya grabando en la variable con el valor del bucle.
Ahora voy a crear una nueva variable que va a ser de tipo time now precisamente para capturar la hora
de inicio y la hora de final y lo que voy a hacer es a Canal Uno.
Ahora vamos a explicar esta simbología que estoy usando.
Voy a grabar en Canal Uno en ese espacio en memoria que yo he reservado precisamente la diferencia entre
final e inicio aquí me faltó lo vi muy bien sub sub es la función.
Voy a dejar el Mago para que lo vean.
Es la función que me retorna la duración y la duración.
Es un tipo de dato fíjense que por eso hemos tenido que usar un tipo de dato Thain punto duration porque
es un tipo de dato y ese tipo de dato se obtiene usando la función subHD que tiene que ver con el paquete
Time.
Aquí nosotros hemos creado un objeto de tipo they've y aquí lo mismo y lo que va a hacer esta función
dentro de final voy a ejecutar la función SOV y lo va a comparar con el inicio y me va a devolver minutos
segundo horas lo que sea la duración correcta de la ejecución.
Qué logró con esto.
Con esto logró que yo entro en un bucle muy pesado muy pesado y cuando termina el bucle me va a grabar
en un canal.
El valor ahora así todo cuando ejecutemos esto si yo no estoy desde otro lado pidiendo información en
el canal si no estoy pidiendo información del canal.
La ejecución del programa termina y ahí no ha pasado nada.
Por qué.
Porque simplemente yo he grabado en un espacio en memoria un valor pero para que esto sea realmente
como un aguay de lo que tengo que hacer es decirle al sistema a mi programa cuidado esperemos a que
el bucle me devuelva un valor en el Canal Uno.
Eso va a detener la ejecución del programa hasta que se logre ese valor.
Es como esto es un diálogo cuando yo le digo al sistema que va a haber alguien que va a estar a la espera
de un valor en esta posición de memoria.
El programa se detiene hasta que esta rutina ha terminado.
Cómo se maneja eso.
Nosotros hemos visto que aquí le asignamos un valor al Canal Uno.
Esta es la manera.
Esta es la manera con un menor signo de y con un guion menor guión lo que estoy haciendo es asignarle
al Canal Uno el valor resultante de esta función.
Ahora cómo es la sintaxis para decir que estoy escuchando el canal uno bueno.
Aquí vemos que el Canal Uno está a la izquierda y lo que le mueve al canal está a la derecha para decir
que estoy escuchando el Canal Uno se invierten los roles se invierten las posiciones.
Entonces aquí lo que voy a hacer es por ejemplo una variable llamada mcg y le voy a decir que va a ser
el resultado de escuchar Canal Uno.
Fíjense ahora Canal Uno está del lado derecho entonces lo que estoy esperando aquí es que Canal Uno
tenga un valor y se graben en mcg hasta que esto no ocurre.
El programa no continúa esto es el famoso Aguaytía.
Esto está esperando es una promesa que hasta que no se cumplió no sigo con el sistema.
Aquí estoy deteniendo la ejecución y una vez que yo ya recibí un valor en Canal Uno voy a ser un FFT
y voy a mostrar por pantalla el resultado estos se van a dar cuenta cuando ahora lo ejecutemos vamos
a ir a nuestro Eger 15 Eger 15 voy a hacer un corral de Main punto.
Qué es lo que nos va a aparecer primero.
Muy simple el mensaje llegue hasta aquí.
Fíjense que yo envié a ejecutar el bucle y el bucle todavía lo estamos esperando porque es un bucle
muy pesados tiene que iterar cientos de millones de veces o mil millones de veces entonces mientras
está esperando la ejecución del bucle.
Yo como es programación asíncrona el sistema continuó pero no terminó la ejecución.
Aquí no me ha mostrado nada en el McG.
Por qué.
Por qué ahora el sistema está detenido aquí esperando que esto termine vamos a ver va a demorar un poquito
le he puesto muchos ceros seguramente demore 60 segundos o más así que voy a pasar un poquito el video.
Bueno ahí terminaba ha demorado un minuto 24 segundos.
Esta es la respuesta.
Este es el formato que nos devuelve el Talentum punto duration.
Hay que ver el minuto segundos y hasta toda esta cantidad enorme de segundos de milisegundos centésimas
de segundo y demás.
Bueno esto es la comunicación entre channels esto es algo maravilloso nos ha hecho la vida mucho más
fácil Bogut con esto.
Fíjense la simplicidad que tiene no es comparable con ningún lenguaje que ustedes conozcan JavaScript
ha hecho un gran trabajo pero lo ha complicado demasiado y con GOW tenemos la vida mucho más resuelta
y mucho más sencilla así que nos vemos en el próximo capítulo y vamos viendo mucho más del lenguaje.