Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Une file d’attente entre deux services

La leçon entière est à lire ici. Créez un compte gratuit pour lancer ses commandes dans un laboratoire et passer ses quiz et ses exercices.

Leçon de 45 minAucune commande

L’ouverture de la billetterie

Un festival de musique en Bretagne ouvre sa billetterie un mardi à 10 h. En dix minutes, 30 000 personnes achètent un billet.

Chaque billet est un PDF envoyé par courriel. Le service qui les fabrique en produit 500 par minute.

Si le site attend chaque PDF avant de valider l’achat, il plante. Le festival perd ses ventes.

À la fin de cette leçon

Remarque

Je peux expliquer pourquoi une file d’attente laisse deux services travailler chacun à son rythme.

Mots-clés

MotCe que ça veut direExemple
File d’attenteune liste de messages qui attendent leur tour
Messageune tâche à fairebillet de la commande 501
Producteurle service qui ajoute les messages
Consommateurle service qui prend les messages et fait le travail
En attenteles messages pas encore traités
Instanceune copie du consommateur qui tourne

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une file se place entre deux services

Une file d’attente garde le travail à faire. Le site de la billetterie est le producteur. Pour chaque achat, il ajoute un message dans la file. Puis il passe tout de suite au client suivant.

Le service des billets est le consommateur. Il prend le message le plus ancien, fabrique le PDF, puis prend le suivant. Aucun des deux n’attend l’autre.

Essayez : une file en Python

Code: python
# Une liste utilisée comme file : on ajoute à la fin, on prend au début.
file = []

# La billetterie ajoute un message par achat, puis passe au client suivant.
file.append("billet de la commande 501")
file.append("billet de la commande 502")
file.append("billet de la commande 503")
print("En attente :", len(file))

# Le service des billets prend toujours le message le plus ancien.
message = file.pop(0)
print("Envoi du", message)
print("En attente :", len(file))

# Ajoutez la commande 504, puis prenez encore deux messages.
# Quel message reste à la fin ?

Les messages s’accumulent, puis la file se vide

Chaque service garde son propre rythme. Quand les achats arrivent plus vite que les PDF sortent, les messages en attente s’accumulent.

Après le rush, le consommateur rattrape son retard. La file se vide.

Rien ne se perd pendant l’attente. Le client reçoit son billet quelques minutes plus tard. C’est bien mieux qu’une erreur au moment de payer.

Exemple travaillé : quatre minutes d’ouverture

MinuteAchats reçusBillets envoyésEn attente ensuite
1800500300
2700500500
3300500300
41005000

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup pensent qu’une file d’attente accélère le travail. C’est faux : le service fabrique toujours 500 billets par minute. La file absorbe le rush et évite que le site attende. Si les messages arrivent trop vite tous les jours, il faut plus d’instances.

Plusieurs instances vident la file plus vite

Le consommateur peut tourner en plusieurs instances. Chacune prend un message différent. Deux instances à 20 messages par minute en traitent 40 ensemble.

La file aide aussi en cas de panne. Si le service des billets s’arrête dix minutes, les messages attendent. Au redémarrage, il reprend au plus ancien. Aucune commande n’est oubliée.

Exemple travaillé : vider 600 messages

InstancesMessages par minuteMinutes pour vider
12030
24015
36010
51006

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.