Go, langage de programmation conçu par Google, est devenu un langage de choix pour réaliser des microservices, des applications système ou pour des applications destinées au cloud. Reconnu pour sa simplicité, sa facilité d'apprentissage et son modele de programmation concurrente, il a servi dans la construction de plusieurs projets très populaires, tels que Docker, Kubernetes, Grafana ou Swarm. Vous ne connaissez pas encore Go ? Venez le découvrir en atelier ! Initiez-vous en douceur au langage, à son outillage et aux concepts qui lui sont propres, avec comme objectif final une introduction à certains pattern de programmation concurrente en Go.
3. @xebiconfr #xebiconfr
AU MENU D’AUJOURD’HUI1
● Rappels sur Go
● Le modèle de concurrence
● Le Hands-on (le jeu)
○ les pré-requis (liens vers installation)
○ les buts
○ les objectifs
○ le déroulement
3
6. @xebiconfr #xebiconfr
Rappels sur Go II
● Syntaxe proche du C, simple et familier
● Modèle de programmation concurrente basé sur
le modèle CSP
Et plein d’autres choses encore...
1
6
8. @xebiconfr #xebiconfr
Le modèle CSP
● CSP = Communicating Sequential Processes
● Hoare, 1978
● Implémenté au travers de channels et de
goroutines
2
8
9. @xebiconfr #xebiconfr
Go channel
P2 P3
P1
CHANNEL
Pipeline qui permet à plusieurs processus
de communiquer
2
9
“Don't communicate by
sharing memory; share
memory by communicating”.
12. @xebiconfr #xebiconfr
Le jeu
Le but :
Vous êtes le serveur d’un bar. Tout est calme, lorsque soudain
débarque dans votre troquet une horde assoiffée.
3
12
14. @xebiconfr #xebiconfr
Le jeu
En tant que serveur, vous allez recevoir des commandes qu’il vous faudra
soumettre au barman puis revenir auprès des clients pour les servir… Et
vous faire payer !
3
14
16. @xebiconfr #xebiconfr
Le jeu
Le but :
● Suivre les étapes indiquées dans la documentation, le code et
faire passer tous les tests
● Connecter votre serveur au client et au barman
3.1
16
20. @xebiconfr #xebiconfr
Le jeu
Le but :
● Optimiser votre score, tout en prenant en compte les limites du
barman
● La validation est faite par le barman : si vous envoyez plus de 5
commandes en parallèle, vous serez (lourdement) pénalisés
3.2
20
21. @xebiconfr #xebiconfr
Le jeu
Le but :
● Découverte et utilisation d’un pattern de programmation
concurrente simple
● Pour aller plus loin : essayer d'être meilleur que les autres
participants !
21
3.2
22. @xebiconfr #xebiconfr
● Vous n’avez pas à vous soucier des threads, mais des
goroutines
Rappel
22
3.2
Thread 2 Thread 3Thread 1
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
goroutine
23. @xebiconfr #xebiconfr
● Lorsqu’une opération est bloquante (I/O, lecture ou écriture sur
un channel, ...), un scheduler fourni par Go se charge de la
commutation de contexte entre goroutines
● Le partage des données entre goroutines se fait
préférentiellement de façon événementielle, en utilisant des
channels
Rappel
23
3.2
24. @xebiconfr #xebiconfr
Rappel - Go channel
P2 P3
P1
CHANNEL
messages := make(chan string)
func someFunc() {
messages <- "ping"
}
func main() {
go someFunc()
msg := <-messages
fmt.Println(msg)
}
Pipeline qui permet à plusieurs processus
de communiquer
24
3.2