Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porAsunción Toro Murillo Modificado hace 8 años
2
Agenda Historia Características Mecanismos de concurrencia Ejemplos Desventajas Accesibilidad Conclusiones Bibliografía
4
Historia
5
Características Lenguaje Compilado ◦ Desempeño ◦ Velocidad ◦ Seguridad Velocidad de desarrollo ◦ Elimina dependencias innecesarias ◦ Minimiza el árbol de dependencias ◦ Velocidad de compilación
6
Características Sintaxis Similar a C o C++ ◦ Diferencias: Declaración de las variables For es la única instrucción para ciclos Punto y coma innecesario a final de instrucciones If y For no usan paréntesis para encerrar condición No maneja clases; sino structs con métodos
7
Características package main import "fmt“ var a,b int = 1,2 func main() { a := 0 for i := 0; i < 10; i++ { a += i } fmt.Println(a) }
8
Características Lenguaje Orientado a Objetos? ◦ Lenguaje orientado a objetos donde no existen objetos ◦ Cubetas que implementan cosas Recolector de basura Open Source Lenguaje Multipropósito ◦ Programación Mobil ◦ Programación Web ◦ Programación Sistemas
9
Métodos de Concurrencia
10
Do not communicate by sharing memory; instead, share memory by communicating.
11
Goroutines Elemento básico de concurrencia Ejecución en paralelo Misma dirección de memoria Livianos Multiplexados en muchos hilos del S.O go list.Sort()
12
Ejemplos package main import "fmt" func sum(a []int, c chan int) { sum := 0 for _, v := range a { sum += v } c <- sum // send sum to c } func main() { a := []int{7, 2, 8, -9, 4, 0} c := make(chan int) go sum(a[:len(a)/2], c) go sum(a[len(a)/2:], c) x, y := <-c, <-c // receive from c fmt.Println(x, y, x + y) }
13
Canales Combinan comunicación con sincronización Buffered o unbuffered Envío y recepción de mensajes con operador -> Bloquean hasta que ambos lados del canal esten listos. canal <- 4 <- canal
14
Ejemplos package main import "fmt" func main() { c := make(chan int, 2) c <- 1 c <- 2 fmt.Println(<-c) }
15
Paralelización Uso de múltiples núcleos Cálculos complejos divididos Canal recibe resultados
16
Ejemplos const NCPU = 4 // number of CPU cores func (v Vector) DoAll(u Vector) { c := make(chan int, NCPU) // Buffering optional but sensible. for i := 0; i < NCPU; i++ { go v.DoSome(x,y) } // Drain the channel. for i := 0; i < NCPU; i++ { <-c // wait for one task to complete } // All done. }
17
Desventajas Lenguaje experimental Compilador no funciona en Windows No tiene manejo de excepciones
18
Accesibilidad Tour Compilación y ejecución en línea Ejercicios Prácticas de programación Código fuente Instrucciones de instalación Documentación Especificación
19
Conclusiones Go es un potente lenguaje de programación que mezcla las ventajas de lenguajes compilados con las de los lenguajes dinámicos. Semántica similar a lenguajes de programación básicos. Aumenta velocidad de desarrollo y por ende el desempeño de los trabajadores. Brinda mecanismos de concurrencia muy prácticos y de uso sencillo.
20
Bibliografía www.golang.org www.golang.org http://blog.golang.org/2010/09/go-concurrency-patterns-timing-out- and.html http://blog.golang.org/2010/09/go-concurrency-patterns-timing-out- and.html http://www.genbetadev.com/herramientas/introduccion-al-lenguaje- de-programacion-go http://www.genbetadev.com/herramientas/introduccion-al-lenguaje- de-programacion-go http://www.eweek.com/c/a/Application-Development/12-Things-to- Know-About-Googles-Go-Programming-Language-859839/ http://www.eweek.com/c/a/Application-Development/12-Things-to- Know-About-Googles-Go-Programming-Language-859839/ http://golang.org/doc/effective_go.html#concurrency http://golang.org/doc/effective_go.html#concurrency http://www.eweek.com/c/a/Application-Development/12-Things-to- Know-About-Googles-Go-Programming-Language-859839/1/ http://www.eweek.com/c/a/Application-Development/12-Things-to- Know-About-Googles-Go-Programming-Language-859839/1/
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.