Mittagszeit in der Lieferapp
Eine Lieferapp erzeugt für jede Bestellung eine Rechnung als PDF. Vormittags kommen 5 Bestellungen pro Minute. Um 12 Uhr sind es 40.
Der Rechnungsdienst schafft nur 15 pro Minute. Wartet die App auf jede Rechnung, bricht die Bestellung ab. Das Restaurant verliert Umsatz zur besten Zeit.
Am Ende dieser Lektion
Notiz
Ich kann erklären, warum eine Warteschlange zwei Teile in ihrem eigenen Tempo arbeiten lässt.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Warteschlange | eine Reihe von Aufträgen, die warten | |
| Nachricht | ein einzelner Auftrag in der Schlange | Rechnung für Bestellung 7001 |
| Producer | der Teil, der Nachrichten einreiht | |
| Consumer | der Teil, der Nachrichten abholt und erledigt | |
| Rückstau | die Nachrichten, die noch warten | |
| Worker | eine laufende Kopie eines Consumers |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Schlange steht zwischen zwei Teilen
Eine Warteschlange ist eine Reihe von Aufträgen, die warten. Die App ist der Producer. Sie legt eine Nachricht ab, etwa „Rechnung für Bestellung 7001“, und macht sofort weiter.
Der Rechnungsdienst ist der Consumer. Er holt die älteste Nachricht, erledigt sie und holt die nächste. Keiner wartet auf den anderen.
Ausprobieren: eine Schlange in Python
# Eine Liste als Warteschlange: hinten anhängen, vorne entnehmen.
schlange = []
# Die App hängt drei Aufträge an und macht sofort weiter.
schlange.append("Rechnung für Bestellung 7001")
schlange.append("Rechnung für Bestellung 7002")
schlange.append("Rechnung für Bestellung 7003")
print("Wartend:", len(schlange))
# Der Rechnungsdienst nimmt den ältesten Auftrag zuerst.
auftrag = schlange.pop(0)
print("Bearbeite:", auftrag)
print("Wartend:", len(schlange))
# Hängen Sie die Rechnung für Bestellung 7004 an und entnehmen Sie zwei weitere Aufträge.
# Welcher Auftrag bleibt übrig?
Der Rückstau wächst und schrumpft wieder
Jeder Teil arbeitet in seinem Tempo. Kommen Nachrichten schneller, als der Consumer schafft, wächst der Rückstau. Ist der Ansturm vorbei, holt der Consumer auf.
Dabei geht nichts verloren. Ein Gast bekommt die Rechnung ein paar Minuten später. Das ist viel besser als eine Fehlermeldung bei der Bestellung.
Beispiel: vier Minuten Ansturm
| Minute | Neue Aufträge | Erledigt | Rückstau danach |
|---|---|---|---|
| 1 | 40 | 15 | 25 |
| 2 | 40 | 15 | 50 |
| 3 | 10 | 15 | 45 |
| 4 | 0 | 15 | 30 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, eine Schlange mache die Arbeit schneller. Das stimmt nicht: Der Rechnungsdienst schafft weiter 15 pro Minute. Die Schlange fängt nur einen Ansturm ab. Kommen den ganzen Tag mehr Aufträge, als er schafft, wird der Rückstau nie leer. Dann braucht es mehr Worker.
Mehr Worker leeren den Rückstau schneller
Einen Consumer können Sie mehrfach starten. Jede Kopie heißt Worker und holt eine andere Nachricht. Zwei Worker mit je 15 Rechnungen pro Minute schaffen zusammen 30.
Fällt der Rechnungsdienst für zehn Minuten aus, warten die Nachrichten einfach. Danach geht es bei der ältesten weiter. Kein Auftrag wird vergessen.
Beispiel: ein Rückstau von 600
| Worker | Rechnungen pro Minute | Minuten bis leer |
|---|---|---|
| 1 | 15 | 40 |
| 2 | 30 | 20 |
| 3 | 45 | 14 (aufgerundet) |
| 4 | 60 | 10 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Nachricht kann scheitern
Manchmal klappt ein Auftrag nicht, etwa weil die Bestellnummer fehlt. Die Schlange probiert ihn dann einige Male erneut. Hilft das nicht, landet er in einer zweiten Schlange für Fehler.
Dort schaut ein Mensch nach. So blockiert ein kaputter Auftrag nicht alle anderen.
Zwei Grenzen gibt es. Manche Schlangen liefern eine Nachricht selten zweimal oder in leicht anderer Reihenfolge, und Nachrichten bleiben nur begrenzte Zeit erhalten, etwa Tage. Ein Consumer sollte das vertragen.