Aufgabe 07 - Parallel oder nacheinander?
Aufgabe 07 - Parallel oder nacheinander?
Abschnitt betitelt „Aufgabe 07 - Parallel oder nacheinander?“Worum geht es?
Abschnitt betitelt „Worum geht es?“Aus der Pizzeria wird ein Betrieb: mehrere Bestellungen gleichzeitig. Sie messen den Unterschied zwischen sequentieller und paralleler Ausführung, werten Sammelaktionen mit Einzelbericht aus, bauen Timeouts und stoßen an die Grenze des Event Loops, hinter der Worker beginnen (siehe Kapitel Nebenläufigkeit II).
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Nebenläufigkeit II vollständig; Ihre Pizzeria aus Aufgabe 05 (gehärtet in Aufgabe 06).
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie koordinieren parallele Abläufe mit
Promise.all,allSettledundrace. - Sie belegen Parallelisierungs-Entscheidungen mit Messwerten.
- Sie grenzen asynchrones Warten von echter Parallelität (Worker) ab.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: die Kombinatoren nach Vorlage einsetzen (Teil A).
- Reorganisation und Transfer: Zeitverhalten messen, Timeouts konstruieren, Ergebnisse interpretieren (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: die Grenze des Modells nachweisen und die Worker-Lösung bewerten (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Der Ansturm
Abschnitt betitelt „Teil A - Der Ansturm“- Fünf Bestellungen nacheinander (Schleife mit
await): Gesamtdauer mitperformance.now()messen und notieren. - Fünf Bestellungen parallel (
Promise.allüberorders.map(...)): Gesamtdauer messen. Erklären Sie das Verhältnis der beiden Zeiten in zwei Sätzen (Stichwort: das langsamste Promise). - Provozieren Sie eine verbrannte Pizza und beobachten Sie:
Promise.allreißt alle Bestellungen mit in den Fehlerfall, auch die gelungenen.
Teil B - Der Küchenbericht
Abschnitt betitelt „Teil B - Der Küchenbericht“- Ersetzen Sie
Promise.alldurchPromise.allSettledund erzeugen Sie einen Bericht:4 delivered, 1 burned, mit Auflistung der Fehlgeschlagenen samt Grund. - Begründen Sie in zwei Sätzen fachlich, warum hier
allSettleddas richtige Werkzeug ist und wann dagegenallkorrekt wäre (das Kapitel nennt das Kriterium).
Teil C - Der ungeduldige Kunde
Abschnitt betitelt „Teil C - Der ungeduldige Kunde“- Implementieren Sie
withTimeout<T>(promise: Promise<T>, milliseconds: number): Promise<T>mitPromise.race: Dauert der Vorgang länger, scheitert er mit"too slow, order canceled". - Testen Sie mit einem Timeout knapp über und knapp unter der typischen Bestelldauer; beide Fälle im Log nachweisbar.
- Erklären Sie in zwei Sätzen den Schönheitsfehler von
race(was macht der Verlierer?) und wieAbortControllersich davon unterscheidet.
Teil D - Expertenteil: Die Grenze des Event Loops
Abschnitt betitelt „Teil D - Expertenteil: Die Grenze des Event Loops“- Bauen Sie eine bewusst teure synchrone Funktion (etwa eine naive rekursive Fibonacci-Berechnung mit n um 40) und starten Sie parallel dazu eine “Uhr” (
setInterval, jede Sekunde ein Log). Beobachtung: Die Uhr stottert oder steht, solange gerechnet wird. Erklären Sie warum, mit dem Event-Loop-Modell. - Lagern Sie die Berechnung in einen Worker aus (Node:
worker_threads, Browser: Web Worker) und weisen Sie nach, dass die Uhr jetzt durchläuft, während gerechnet wird. - Beschreiben Sie in drei Sätzen den Unterschied zwischen “asynchron” (Warten überbrücken) und “echt parallel” (gleichzeitig rechnen) und ordnen Sie zu, wofür der Event Loop genügt und wofür nicht.
- Zusatz: Begrenzen Sie die Gleichzeitigkeit des Ansturms aus Teil A auf höchstens zwei Bestellungen zugleich (eine einfache Warteschlangen-Logik genügt) und messen Sie erneut. In welcher realen Situation ist genau diese Begrenzung nötig?
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Wovon hängt die Gesamtdauer von
Promise.allab? - Nach welchem fachlichen Kriterium wählt man zwischen
allundallSettled? - Was liefert
allSettledpro Eintrag, und wie unterscheidet man Erfolg von Fehlschlag? - Warum stottert die Uhr bei schwerer synchroner Rechenarbeit, obwohl
setInterval“asynchron” ist? - Worüber kommunizieren Worker mit dem Hauptthread, und was teilen sie nicht?
kitchen.ts (plus Worker-Datei), die Messwerte aus den Teilen A und D als Tabelle und die schriftlichen Erklärungen als Kommentar.