/* Page prose (ja) */
"SerialVsConcurrent" = "# シリアル vs. 並行: 順序と重なり\n\nすべてのキューは**シリアル**か**並行**のどちらかであり、その違いはキューについて理解すべき最も重要な一点です。\n\n* **シリアルキュー**は、一度に1つのクロージャを、追加した順（FIFO）に、完了まで実行します。2つのタスクが重なることはありません。1人のバリスタ、一度に1枚の伝票。\n* **並行キュー**は、複数のクロージャを複数のスレッドで同時に実行することがあります。順番に*開始*しますが、どんな順序で終わるかは分かりません。多くのバリスタが同じレールから伝票を取っていきます。\n\nメインキューはシリアルです。グローバルキューは並行です。カスタムキューは、`attributes: .concurrent` で並行を選ばない限りシリアルです。\n\nこちらは厳密な順序を保つ**シリアル**なカスタムキューです。\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\nこれを単独で実行すると、注文は毎回必ず `1, 2, 3, 4` の順で表示されます。シリアルキューは約束です。タスクは送信された順に、次々と実行されます。\n\nさあ、同じ4つの注文を下の**並行**キューで実行してみましょう。";
"SerialVsConcurrent-2" = "**実行して確認:** 注文番号は**バラバラ**に出てきます。今回は `3, 1, 4, 2` かもしれず、次回は別の順かもしれません。順番に*開始*したものの、並列に実行され、それぞれのランダムな抽出時間が終わった時点で完了しました。この非決定性は本物です。何度か実行すれば、異なる順序が見られます。もしコードが並行タスクの終わる順序に依存することがあれば、それは起こるのを待っているバグです。\n\n* callout(試してみよう): 3回続けて実行してみましょう。`1, 2, 3, 4` になることはありますか？ 次に `attributes: .concurrent` を削除して、さらに3回実行してみましょう。\n\n[前へ](@previous)  |  5 / 9 ページ  |  [次へ: 帰りの道のり: メインに戻る](@next)";
