View
154
Download
0
Category
Preview:
Citation preview
@xebiconfr #xebiconfr
Concurrent programming with
Go
JeromeDOUCET
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é-requis (liens vers installation)○ les buts○ les objectifs○ le déroulement
3
@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 basé sur le modèle CSP
Et plein d’autres choses encore...
1
6
@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 channels et de goroutines
2
8
@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”.
@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 troquet une horde assoiffée.
3
12
@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 puis revenir auprès des clients pour les servir… Et vous faire payer !
3
14
@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 les tests
● Connecter votre serveur au client et au barman
3.1
16
@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 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
@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
@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
@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
@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
@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
orde
rCha
n
/orders/orders
.
.
.
consumeOrder=5
26
3.2
Recommended