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

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