/* Page prose (de) */
"SerialVsConcurrent" = "# Seriell vs. nebenläufig: Reihenfolge und Überlappung\n\nJede Warteschlange ist entweder **seriell** oder **nebenläufig**, und dieser Unterschied ist das mit Abstand Wichtigste, was du über Warteschlangen verstehen musst.\n\n* Eine **serielle Warteschlange** führt eine Closure nach der anderen bis zum Ende aus, in der Reihenfolge, in der du sie hinzugefügt hast (FIFO). Nie überlappen sich zwei ihrer Aufgaben. Ein Barista, ein Zettel nach dem anderen.\n* Eine **nebenläufige Warteschlange** kann viele ihrer Closures gleichzeitig ausführen, auf mehreren Threads. Sie *startet* sie in Reihenfolge, aber sie können in beliebiger Reihenfolge fertig werden. Viele Baristas, die Zettel von derselben Schiene ziehen.\n\nDie main-Warteschlange ist seriell. Globale Warteschlangen sind nebenläufig. Eine benutzerdefinierte Warteschlange ist seriell, es sei denn, du entscheidest dich mit `attributes: .concurrent` für Nebenläufigkeit.\n\nHier ist eine **serielle** benutzerdefinierte Warteschlange, die strikte Reihenfolge einhält:\n\n```swift\n// Serial by default: one order finished before the next starts.\nlet counter = DispatchQueue(label: \"coffee-bar.serial\")\n\nfor order in 1...4 {\n    counter.async {\n        Thread.sleep(forTimeInterval: 0.2)  // brewing time\n        print(\"Served order #\\(order)\")\n    }\n}\n```\n\nFühre das für sich allein aus, und die Bestellungen drucken immer `1, 2, 3, 4`, in dieser Reihenfolge, jedes Mal. Eine serielle Warteschlange ist ein Versprechen: Aufgaben laufen eine nach der anderen, in der Reihenfolge, in der sie übermittelt wurden.\n\nFühre jetzt dieselben vier Bestellungen unten auf einer **nebenläufigen** Warteschlange aus.";
"SerialVsConcurrent-2" = "**Sieh es laufen:** Die Bestellnummern kommen **durcheinander** heraus: vielleicht `3, 1, 4, 2` diesmal, etwas anderes beim nächsten Mal. Sie *starteten* in Reihenfolge, liefen aber parallel und wurden fertig, wann immer ihre zufällige Brühzeit abgelaufen war. Dieser Nichtdeterminismus ist real: Führe es ein paar Mal aus, und du siehst unterschiedliche Reihenfolgen. Wenn dein Code jemals davon abhängt, in welcher Reihenfolge nebenläufige Aufgaben fertig werden, dann ist das ein Fehler, der nur darauf wartet, zu passieren.\n\n* callout(Probier es aus): Führe es dreimal hintereinander aus. Bekommst du je `1, 2, 3, 4`? Lösche jetzt `attributes: .concurrent` und führe es noch dreimal aus.\n\n[Zurück](@previous)  |  Seite 5 von 9  |  [Weiter: Die Rückreise: zurück zu main springen](@next)";
