Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MATRICULA: 1319104657
CUATRIMESTRE: Séptimo
GRUPO: 2722IS
FECHA: 16-Nov-22
1
Contenido
INTRODUCCIÓN .............................................................................................................................. 4
CARACTERÍSTICAS DE GO..................................................................................................... 5
CONCURRENCIA NO ES PARALELISMO. ............................................................................... 5
CORRUTINAS EN GO ................................................................................................................ 6
WAITGROUPS EN GO ............................................................................................................... 7
EL MÉTODO ADD ....................................................................................................................... 7
EL MÉTODO DONE. ................................................................................................................... 8
FUNCIONES ANÓNIMAS EN GOROUTINES. ....................................................................... 9
COMUNICANDO GOROUTINES CON CHANNELS ............................................................. 9
CHANNELS O CANALES CON BUFFER ............................................................................. 10
CANALES DE ENTRADA Y SALIDA .................................................................................... 10
CONCLUSION ................................................................................................................................ 11
BIBLIOGRAFÍA .............................................................................................................................. 12
2
FIGURA 1. Logo de GO ......................................................................................... 4
FIGURA 2. Función MAIN...................................................................................... 6
FIGURA 3. Goroutines .......................................................................................... 6
FIGURA 4. WaitGroups ......................................................................................... 7
FIGURA 5. Método ADD ........................................................................................ 7
FIGURA 6. Método DONE...................................................................................... 8
FIGURA 7. Gorotuines Waigroup ......................................................................... 8
FIGURA 8. Esquema básico del funcionamiento de los channels o canales en
Go ........................................................................................................................... 9
FIGURA 9. Canal de entrada ............................................................................... 10
FIGURA 10. Canal de salida................................................................................ 10
3
INTRODUCCIÓN
FIGURA 1. Logo de GO
4
CARACTERÍSTICAS DE GO.
CONCURRENCIA NO ES PARALELISMO.
5
CORRUTINAS EN GO
FIGURA 3. Goroutines
6
¿Pero entonces? ¿cómo le hacemos para que nuestra goroutine se ejecute? La
aproximación ingenua sería usar un sleep para pausar la ejecución del código.
Esto, como ya sabes, es un sinsentido.
WAITGROUPS EN GO
FIGURA 4. WaitGroups
EL MÉTODO ADD
El método Add incrementa el contador del WaitGroup en n unidades, donde n es el
argumento que le pasamos. Lo llamaremos cada vez que ejecutemos una goroutine.
7
EL MÉTODO DONE.
El método Done se encarga de disminuir una unidad del contador del Waigroup. Lo
llamaremos para avisarle al WaitGroup que la goroutine ha finalizado y decremente
el contador en uno.
Recuerda que la instancia del Waigroup (wg *) necesita pasarse por referencia o de
otra manera no accederemos al Waigroup original.
Un tip bastante útil es usar defer sobre el método Done para garantizar que sea lo
último que se ejecute.
8
Una vez que el contador de wg.Wait se vuelve cero, se continua la ejecución del
programa.
Hasta ahora he explicado como ejecutar una goroutine, ejecutar código de manera
concurrente con las goroutines y a esperar a que terminen de ejecutarse, pero
nuestras goroutines no pueden hacer nada más, no pueden cooperar entre ellas
para acelerar los procesos.
Las goroutines pueden enviar datos a los canales y también leer datos de ellos,
logrando comunicarse entre sí.
9
Un channel o canal en go se declara con make y la palabra chan, que hace
referencia a la palabra channel.
El tipo de dato de un canal también puede ser uno definido usando un struct.
Es importante definir el tipo de canal pues, con los canales bidireccionales corremos
el riesgo de ocasionar un bloqueo en nuestro programa.
10
CONCLUSION
Go no corre sobre ninguna máquina virtual. Crea ejecutables para los sistemas
operativos a los que apunta, que contienen todo lo necesario para poder ejecutarse
sin necesidad de tener algo instalado allí. Al ser compilado, Go es mucho más
eficiente para correr que otros lenguajes interpretados, como JS, Python o Ruby.
Consume menos memoria y su velocidad se acerca a la de C.
Fue pensado para ser simple. Sus estructuras, su sintaxis y su filosofía lo hacen
fácil de leer y de aprender. Es cierto que no es tan legible como Python, por ejemplo,
pero es mucho más legible que otros lenguajes con características similares como
C++ o Java.
Una de las promesas de Go desde el principio era poder hacer mucho con poco. Y
es algo que cumple completamente. Su librería estándar está diseñada y construida
por verdaderos titanes de la ingeniería del software.
11
BIBLIOGRAFÍA
https://coffeebytes.dev/go-goroutines-channels-o-canales-introduccion/
https://blog.thedojo.mx/2019/09/01/por-que-deberias-aprender-
go.html#:~:text=Crea%20ejecutables%20para%20los%20sistemas,como%20JS%
2C%20Python%20o%20Ruby.
12
13