xebicon'16 : la programmation concurrente en go. par jérome doucet et diana ortega,...
TRANSCRIPT
![Page 1: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/1.jpg)
@xebiconfr #xebiconfr
Concurrent programming with
Go
JeromeDOUCET
Diana ORTEGA
![Page 2: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/2.jpg)
@xebiconfr #xebiconfr
Jérôme Doucet
jerdct
jeromedoucet
2
Diana Ortega
dicaormu
dicaormu
![Page 3: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/3.jpg)
@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
![Page 4: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/4.jpg)
@xebiconfr #xebiconfr
Rappels sur Go
1
4
![Page 5: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/5.jpg)
@xebiconfr #xebiconfr
Rappels sur Go
● Langage de programmation récent (2007)
● Compilation statique, garbage collector
1
5
![Page 6: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/6.jpg)
@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
![Page 7: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/7.jpg)
@xebiconfr #xebiconfr
Le modèle CSP
2
7
![Page 8: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/8.jpg)
@xebiconfr #xebiconfr
Le modèle CSP
● CSP = Communicating Sequential Processes
● Hoare, 1978
● Implémenté au travers de channels et de goroutines
2
8
![Page 9: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/9.jpg)
@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”.
![Page 10: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/10.jpg)
@xebiconfr #xebiconfr
Le Jeu
3
10
![Page 11: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/11.jpg)
@xebiconfr #xebiconfr
Le jeu
http://vil-coyote-acme.github.io/go-xke/
3
11
![Page 12: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/12.jpg)
@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
![Page 13: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/13.jpg)
@xebiconfr #xebiconfr
Le jeu
Votre objectif est alors de satisfaire au mieux leurs demandes !
3
13
![Page 14: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/14.jpg)
@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
![Page 15: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/15.jpg)
@xebiconfr #xebiconfr
1ère partie
3.1
15
![Page 16: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/16.jpg)
@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
![Page 17: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/17.jpg)
@xebiconfr #xebiconfr
Schéma
TOI
/orders
/orders
/bill/player/idOrder
3.1
17
![Page 18: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/18.jpg)
@xebiconfr #xebiconfr
2ème partie
3.2
18
![Page 19: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/19.jpg)
@xebiconfr #xebiconfr
Le jeu3.2
19
![Page 20: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/20.jpg)
@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
![Page 21: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/21.jpg)
@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
![Page 22: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/22.jpg)
@xebiconfr #xebiconfr
● Vous n’avez pas à vous soucier des threads, mais des goroutines
Rappel
22
3.2
Thread 2 Thread 3Thread 1
goroutinegoroutine
goroutinegoroutine
goroutinegoroutine
goroutinegoroutine
goroutinegoroutine
goroutinegoroutine
goroutinegoroutine
goroutinegoroutine
![Page 23: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/23.jpg)
@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
![Page 24: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/24.jpg)
@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
![Page 25: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/25.jpg)
@xebiconfr #xebiconfr
Schéma original
TOI
/orders
/orders
/bill/player/idOrder
handleOrder
3.2
25
![Page 26: XebiCon'16 : La programmation concurrente en Go. Par Jérome Doucet et Diana Ortega, Développeurs chez Xebia](https://reader034.vdocuments.mx/reader034/viewer/2022042707/587288291a28ab36118b4633/html5/thumbnails/26.jpg)
@xebiconfr #xebiconfr
Schéma
TOI
/orders
/orders
/bill/player/idOrder
handleOrder
orde
rCha
n
/orders/orders
.
.
.
consumeOrder=5
26
3.2