@xebiconfr #xebiconfr
Concurrent
programming with
Go
Jerome
DOUCET
Diana
ORTEGA
@xebiconfr #xebiconfr
Jérôme Doucet
jerdct
jeromedoucet
2
Diana Ortega
dicaormu
dicaormu
@xebiconfr #xebiconfr
AU MENU D’AUJOURD’HUI1
● Rappels sur Go
● Le modèle de concurrence
● Le Hands-on (le jeu)
○ les pré-...
@xebiconfr #xebiconfr
Rappels sur Go
1
4
@xebiconfr #xebiconfr
Rappels sur Go
● Langage de programmation récent (2007)
● Compilation statique, garbage collector
1
5
@xebiconfr #xebiconfr
Rappels sur Go II
● Syntaxe proche du C, simple et familier
● Modèle de programmation concurrente ba...
@xebiconfr #xebiconfr
Le modèle CSP
2
7
@xebiconfr #xebiconfr
Le modèle CSP
● CSP = Communicating Sequential Processes
● Hoare, 1978
● Implémenté au travers de ch...
@xebiconfr #xebiconfr
Go channel
P2 P3
P1
CHANNEL
Pipeline qui permet à plusieurs processus
de communiquer
2
9
“Don't comm...
@xebiconfr #xebiconfr
Le Jeu
3
10
@xebiconfr #xebiconfr
Le jeu
http://vil-coyote-acme.github.io/
go-xke/
3
11
@xebiconfr #xebiconfr
Le jeu
Le but :
Vous êtes le serveur d’un bar. Tout est calme, lorsque soudain
débarque dans votre t...
@xebiconfr #xebiconfr
Le jeu
Votre objectif est alors de satisfaire au mieux leurs demandes !
3
13
@xebiconfr #xebiconfr
Le jeu
En tant que serveur, vous allez recevoir des commandes qu’il vous faudra
soumettre au barman ...
@xebiconfr #xebiconfr
1ère partie
3.1
15
@xebiconfr #xebiconfr
Le jeu
Le but :
● Suivre les étapes indiquées dans la documentation, le code et
faire passer tous le...
@xebiconfr #xebiconfr
Schéma
TOI
/orders
/orders
/bill/player/idOrder
3.1
17
@xebiconfr #xebiconfr
2ème partie
3.2
18
@xebiconfr #xebiconfr
Le jeu3.2
19
@xebiconfr #xebiconfr
Le jeu
Le but :
● Optimiser votre score, tout en prenant en compte les limites du
barman
● La valida...
@xebiconfr #xebiconfr
Le jeu
Le but :
● Découverte et utilisation d’un pattern de programmation
concurrente simple
● Pour ...
@xebiconfr #xebiconfr
● Vous n’avez pas à vous soucier des threads, mais des
goroutines
Rappel
22
3.2
Thread 2 Thread 3Thr...
@xebiconfr #xebiconfr
● Lorsqu’une opération est bloquante (I/O, lecture ou écriture sur
un channel, ...), un scheduler fo...
@xebiconfr #xebiconfr
Rappel - Go channel
P2 P3
P1
CHANNEL
messages := make(chan string)
func someFunc() {
messages <- "pi...
@xebiconfr #xebiconfr
Schéma original
TOI
/orders
/orders
/bill/player/idOrder
handleOrder
3.2
25
@xebiconfr #xebiconfr
Schéma
TOI
/orders
/orders
/bill/player/idOrder
handleOrder
orderChan
/orders
/orders
.
.
.
consumeO...
Prochain SlideShare
Chargement dans…5
×

XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia

210 vues

Publié le

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.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
210
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
4
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia

  1. 1. @xebiconfr #xebiconfr Concurrent programming with Go Jerome DOUCET Diana ORTEGA
  2. 2. @xebiconfr #xebiconfr Jérôme Doucet jerdct jeromedoucet 2 Diana Ortega dicaormu dicaormu
  3. 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
  4. 4. @xebiconfr #xebiconfr Rappels sur Go 1 4
  5. 5. @xebiconfr #xebiconfr Rappels sur Go ● Langage de programmation récent (2007) ● Compilation statique, garbage collector 1 5
  6. 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
  7. 7. @xebiconfr #xebiconfr Le modèle CSP 2 7
  8. 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. 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”.
  10. 10. @xebiconfr #xebiconfr Le Jeu 3 10
  11. 11. @xebiconfr #xebiconfr Le jeu http://vil-coyote-acme.github.io/ go-xke/ 3 11
  12. 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
  13. 13. @xebiconfr #xebiconfr Le jeu Votre objectif est alors de satisfaire au mieux leurs demandes ! 3 13
  14. 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
  15. 15. @xebiconfr #xebiconfr 1ère partie 3.1 15
  16. 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
  17. 17. @xebiconfr #xebiconfr Schéma TOI /orders /orders /bill/player/idOrder 3.1 17
  18. 18. @xebiconfr #xebiconfr 2ème partie 3.2 18
  19. 19. @xebiconfr #xebiconfr Le jeu3.2 19
  20. 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. 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. 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. 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. 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
  25. 25. @xebiconfr #xebiconfr Schéma original TOI /orders /orders /bill/player/idOrder handleOrder 3.2 25
  26. 26. @xebiconfr #xebiconfr Schéma TOI /orders /orders /bill/player/idOrder handleOrder orderChan /orders /orders . . . consumeOrder=5 26 3.2

×