26
@xebiconfr #xebiconfr Concurrent programming with Go Jerome DOUCET Diana ORTEGA

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

Embed Size (px)

Citation preview

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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@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

@xebiconfr #xebiconfr

Schéma

TOI

/orders

/orders

/bill/player/idOrder

handleOrder

orde

rCha

n

/orders/orders

.

.

.

consumeOrder=5

26

3.2