Para evitar la fatiga
12586269025
Introducción
CaracterÃsticas esenciales de Go
Qué aprenderás y qué necesitas saber
Repaso general: variables, condicionales, slices y map
Repaso general: GoRoutines y apuntadores
Programación orientada a objetos
¿Es Go orientado a objetos?
Structs vs. clases
Métodos y funciones
Constructores
Herencia
Interfaces
Aplicando interfaces con Abstract Factory
Implementación final de Abstract Factory
Funciones anónimas
Funciones variadicas y retornos con nombre
Go Modules
Cómo utilizar los Go modules
Creando nuestro módulo
Testing
Testing
Code coverage
Profiling
Testing usando Mocks
Implementando Mocks
Concurrencia
Unbuffered channels y buffered channels
Waitgroup
Buffered channels como semáforos
Definiendo channels de lectura y escritura
Worker pools
Multiplexación con Select y Case
Proyecto: servidor con worker pools
Definiendo workers, jobs y dispatchers
Creando web server para procesar jobs
Conclusión
Continúa con el Curso de Go Avanzado
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 19
Preguntas 1
Para evitar la fatiga
12586269025
Para ver el uso de CPU del codigo que testeamos, usamos
$ go test -cpuprofile=cpu.out
Para ver el resumen del uso del CPU:
$ go tool pprof cpu.out
Dentro de pprof
escribimos top
para ver como se han comportado los programas en nuestro test
(pprof) top
Además, dentro de pprof
podemos inspeccionar el tiempo promedio de ejecución de cada lÃnea de una función, usando el comando list <nombre_funcion>
(pprof) list Fibonacci
Tambien podemos ver el reporte del promedio de ejecución:
web
pdf
(pprof) web
(pprof) pdf
Para salir de (pprof)
puedes usar quit
o Ctrl + D
Para los que estén en Mac OS pueden instalar Graphviz mediante HomeBrew
brew install graphviz
Para los que tengan el Error y estén en linux (basado en debian):
failed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in $PATH
Lo unico que deben de hacer es un:
$ sudo apt install graphviz
si al ejecutar (pprof) top se muestra:
.
Showing nodes accounting for 0, 0% of 0 total
flat flat% sum% cum cum%
.
Significa que la funcion se ejecuta con una carga muy baja para la cpu, osea la funcion tiene un muy buen rendimiento por lo que esta muy por debajo del umbral detectable por la herramienta pprof de go, osea como la funcion se ejecuta sin consumir mucha cpu entonces pprof no muestra la informacion de rendimiento de dicha funcion ya que no es necesario
Les comparto un articulo publicado en el blog de golang que trata sobre que es profiling y como se implementa y los usos a detalle
https://go.dev/blog/pprof
Esta implementación de Fibonacci es lenta principalmente porque calcula los valores de la sucesión dos veces, dentro de la pila de llamadas, se repite la función con los mismos argumentos. Una forma de mejorar el tiempo y llevarlo a prácticamente la mitad, es cambiar la recursión por un ciclo. Haciendo las sumas de menor a mayor, en lugar de mayor a menor.
func ComputeOnceFibonacci(n int) int {
size := math.Max(2, float64(n+1))
values := make([]int, size)
values[0] = 0
values[1] = 1
for i := 2; i <= n; i++ {
values[i] = values[i-1] + values[i-2]
}
return values[n]
}
Go es increÃble
por si estan usando ubuntu wsl usando el comando
go tool pprof -http=:xxxx cpu.out pueden acceder desde el navegador del host (reemplazar por puerto a gusto y revisar que su IIS no este usando ese puerto jajaja)
Estas herramientas están OP. Go está potente,
Aqui una version del fib, de manera iterativa 😄
func Fibonacci(n int) int {
fib := make([]int, n+1)
fib[0] = 0
fib[1] = 1
for i := 2; i <= n; i++ {
fib[i] = fib[i-1] + fib[i-2]
}
return fib[n]
}
Instalar Graphviz https://graphviz.gitlab.io/download/
create cpu file: $ go test -cpuprofile=cpu.out
execute file: $ go tool pprof cpu.out
/ top ----> comportamiento
/ list <function> ----> reporte
/ web ----> reporte descriptivo
/ pdf ----> reporte descriptivo pdf
Si alguien tiene problemas con instalar en macOS graphviz con brew(homebrew) y tiene el error:
svn: Couldn't perform atomic initialization
SQLite error
svn: SQLite compiled for x.x.x, but running with x.x.x
puede ser por que no tienen actualizado el SQLite, tambien puede ser que no este el link con el SQLite3 de brew y se use el de sistema se puede corregir con:
brew reinstall sqlite3
brew link --force sqlite3
esto no es todo ya que si intentaste installarlo y te dio error quiere decir que varias dependecias ya se instalaron, entre esas la de subversion por lo que toca renistalarla, despues de tener el link con el SQLite3 de brew:
brew reinstall subversion
sudo apt install graphviz gv -y para ejecutar en ambiente linux
Esto esta genial
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?