• Nenhum resultado encontrado

Introdução a Go para programação paralela

N/A
N/A
Protected

Academic year: 2021

Share "Introdução a Go para programação paralela"

Copied!
41
0
0

Texto

(1)

Introdução a Go

Introdução a Go para programação paralela

MO644 — Programação Paralela

Alexandre Medeiros

alexandre.n.medeiros@gmail.com

Instituto de Computação Universidade Estadual de Campinas

(2)

Introdução a Go

Estes slides e os códigos usados na apresentação podem ser encontrados na minha página!

(3)

Introdução a Go Introdução

O que é Go?

Golang

Go, ou Golang, é uma linguagem de programação Open Source onde é fácil fazer programas simples, confiáveis e eficientes.

(4)

Introdução a Go Introdução

O que é Go?

Criadores

A linguagem foi desenvolvida por Robert Griesemer, Rob Pike e Ken Thompson no Google.

(5)

Introdução a Go Introdução

Principais ideias

Compilação rápida Execução rápida Simples de se programar

(6)

Introdução a Go Introdução

Principais ideias

Compilação rápida Execução rápida Simples de se programar

(7)

Introdução a Go Introdução

Principais ideias

Compilação rápida Execução rápida Simples de se programar

(8)

Introdução a Go Introdução Funcionalidades

Funcionalidades interessantes

Sintaxe inspirada em C Garbage-collected

(9)

Introdução a Go Introdução Funcionalidades

Funcionalidades interessantes

Sintaxe inspirada em C Garbage-collected

(10)

Introdução a Go Introdução Funcionalidades

Funcionalidades interessantes

Sintaxe inspirada em C Garbage-collected

(11)

Introdução a Go Introdução

Funcionalidades

E mais importante!

(12)

Introdução a Go Introdução

Funcionalidades

E mais importante!

(13)

Introdução a Go Hands-on!

Exemplos

(14)

Introdução a Go Hands-on!

Hello, World!

p a c k a g e main i m p o r t " f m t " f u n c main () { fmt . P r i n t l n (" H e l l o , W o r l d ! " ) } Programa 1: hello.go $ go run hello.go Hello , W o r l d !

(15)

Introdução a Go Hands-on!

goroutines

goroutines

(16)

Introdução a Go Hands-on! goroutines

goroutines

f u n c say ( s s t r i n g ) { f o r i := 0; i < 3; i ++ { t i m e . S l e e p ( 1 0 0 * t i m e . M i l l i s e c o n d ) fmt . P r i n t l n ( s ) } } f u n c main () { go say ( " W o r l d " ) say (" H e l l o " ) } Programa 2: goroutine.go

(17)

Introdução a Go Hands-on! goroutines

goroutines

$ go run goroutine.go W o r l d H e l l o W o r l d H e l l o W o r l d H e l l o

(18)

Introdução a Go Hands-on!

channels

Canais de comunicação

Os channels são a principal maneira de comunicação e sincronização entre goroutines.

(19)

Introdução a Go Hands-on!

channels

Canais de comunicação

f u n c say ( s s t r i n g , done chan b o o l ) { f o r i := 0; i < 3; i ++ { t i m e . S l e e p ( 1 0 0 * t i m e . M i l l i s e c o n d ) fmt . P r i n t l n ( s ) } d o n e < - t r u e } f u n c main () { d o n e := make( chan b o o l ) go say ( " H e l l o , W o r l d ! " , done ) i f < - d o n e { fmt . P r i n t l n (" D o n e : ) " ) } } Programa 3: channels.go

(20)

Introdução a Go Hands-on! channels

Canais de comunicação

$ go run channels.go Hello , W o r l d ! Hello , W o r l d ! Hello , W o r l d ! D o n e :)

(21)

Introdução a Go Hands-on!

buffered channels

Comunicação não bloqueante

Para que a goroutine não fique bloqueada na hora de enviar dados, é possível criar um canal com um buffer.

(22)

Introdução a Go Hands-on!

buffered channels

Comunicação não bloqueante

f u n c produce ( id , n i n t , ch chan < - i n t ) { f o r i := 0; i < n ; i ++ { val := i * id ch < - val fmt . P r i n t l n ( id , " p r o d u c e d " , val ) } } f u n c main () { ch := make( chan i n t , 2) go produce (42 , 4 , ch ) t i m e . S l e e p ( 1 0 0 * t i m e . M i l l i s e c o n d ) f o r i := 0; i < 4; i ++ { val := < - ch fmt . P r i n t l n (" E l e m e n t " , i , " i s " , val ) } } Programa 4: buffered-channels.go

(23)

Introdução a Go Hands-on!

buffered channels

Comunicação não bloqueante

$ go run buffered-channels.go 42 p r o d u c e d 0 42 p r o d u c e d 42 E l e m e n t 0 is 0 E l e m e n t 1 is 42 E l e m e n t 2 is 84 42 p r o d u c e d 84 42 p r o d u c e d 126 E l e m e n t 3 is 126

(24)

Introdução a Go Hands-on!

select

Múltiplos canais

O select é similar a um switch-case, sua função é receber ou enviar dados com múltiplos canais.

(25)

Introdução a Go Hands-on! select

Múltiplos canais

f u n c main () { ch1 := make( chan i n t , 2) ch2 := make( chan i n t , 2) go produce (1 , 4 , ch1 ) go produce (2 , 4 , ch2 ) f o r i := 0; i < 8; i ++ { s e l e c t { c a s e val := <- ch1 : fmt . P r i n t l n (" F r o m 1 : " , val ) c a s e val := <- ch2 : fmt . P r i n t l n (" F r o m 2 : " , val ) } } } Programa 5: select.go

(26)

Introdução a Go Hands-on! select

Múltiplos canais

$ go run select.go P r o d u c e r 2 : 0 P r o d u c e r 1 : 0 P r o d u c e r 2 : 2 P r o d u c e r 1 : 1 P r o d u c e r 1 : 2 F r o m 1: 0 F r o m 1: 1 P r o d u c e r 1 : 3 P r o d u c e r 2 : 4 F r o m 2: 0 F r o m 1: 2 F r o m 2: 2 F r o m 2: 4 F r o m 2: 6 P r o d u c e r 2 : 6 F r o m 1: 3

(27)

Introdução a Go Hands-on!

range

for-each

(28)

Introdução a Go Hands-on! range

for-each

f u n c main () { a := [5]i n t {1 , 2 , 3 , 4 , 5} f o r i , x := r a n g e a { fmt . P r i n t l n (" E l e m e n t " , i , " i s " , x ) } } Programa 6: range.go

(29)

Introdução a Go Hands-on! range

for-each

$ go run range.go E l e m e n t 0 is 1 E l e m e n t 1 is 2 E l e m e n t 2 is 3 E l e m e n t 3 is 4 E l e m e n t 4 is 5

(30)

Introdução a Go Hands-on!

rangeover channels

for-each em um canal

(31)

Introdução a Go Hands-on!

rangeover channels

for-each em um canal

f u n c produce ( id , n i n t , ch chan < - i n t ) { f o r i := 0; i < n ; i ++ { val := i * id ch < - val fmt . P r i n t l n ( id , " p r o d u c e d " , val ) } c l o s e ( ch ) } f u n c main () { ch := make( chan i n t , 2) go produce (42 , 4 , ch ) f o r val := r a n g e ch { fmt . P r i n t l n (" E l e m e n t i s " , val ) } } Programa 7: range-channel.go

(32)

Introdução a Go Hands-on!

rangeover channels

for-each em um canal

$ go run range-channel.go 42 p r o d u c e d 0 E l e m e n t is 0 42 p r o d u c e d 42 E l e m e n t is 42 42 p r o d u c e d 84 E l e m e n t is 84 42 p r o d u c e d 126 E l e m e n t is 126

(33)

Introdução a Go E ainda tem mais

Ferramentas

Conjunto de ferramentas completo

go build

go run gofmt godoc go get

(34)

Introdução a Go E ainda tem mais

Ferramentas

Conjunto de ferramentas completo

go build go run

gofmt godoc go get

(35)

Introdução a Go E ainda tem mais

Ferramentas

Conjunto de ferramentas completo

go build go run gofmt

godoc go get

(36)

Introdução a Go E ainda tem mais

Ferramentas

Conjunto de ferramentas completo

go build go run gofmt godoc

(37)

Introdução a Go E ainda tem mais

Ferramentas

Conjunto de ferramentas completo

go build go run gofmt godoc go get

(38)

Introdução a Go E ainda tem mais

Links úteis

Referências

tour.golang.org gobyexample.com

(39)

Introdução a Go E ainda tem mais

Links úteis

Divirta-se você também!

(40)

Introdução a Go That’s all folks

(41)

Introdução a Go That’s all folks

Fim!

Referências

Documentos relacionados

Para melhorar velocidade de acesso, a cada acesso, transfere-se trechos maiores do arquivo para espaços da memória

O curso de pós-graduação lato-sensu em E-Commerce &amp; Marketing Digital está estruturado a partir dos 2 módulos abaixo: Empresarial, que poderá ser compartilhado com os alunos

Carro com rodas para capas de arquivo suspenso, com a parte inferior extensível.. Fabricado em tubo

Portanto, para que dois ou mais computadores possam se comunicar numa rede, eles têm que usar o mesmo protocolo, ou seja, têm que falar a mesma linguagem.. Assim como as pessoas,

Marechal Cândido Rondon, 20 de fevereiro de 2017. Scherer Assessoria Empresarial Ltda, empresa integrante do Grupo Sigha, nomeada como Auxiliar Contábil e Gestor, nos

2 No Basis Environment , adicionar TODAS as espécies químicas envolvidas, escolher o pacote termodinâmico de acordo com elas e adicionar a reação química;. 3 Passar para

• ler um valor para 1 variável e repetir isso 4 vezes, adicionando cada valor lido ao total em uma outra variável, a cada repetição.. Lógica de

( )- Quando o espírito atinge o estado de nirvana (pureza espiritual) chega ao fim das reencarnações. Para a o Budismo existem quatro nobres verdades no mundo. Essas