/* Page prose (ja) */
"Overview" = "# グループとセマフォ\n\n角のコーヒーバーに戻りましょう。あるお客さんがオフィス全員分のバッチを注文します。ラテ、コールドブリュー、そしてエスプレッソです。三つを一度に淹れ始めて並行して抽出されるようにします。よい判断です。しかし今度は新しい問題が生じます。トレイをお客さんに渡せるのは**三つすべて**が用意できたときだけで、それぞれが自分のタイミングで仕上がります。コードはバッチが完成したことをどうやって*知る*のでしょうか。そして、五人のバリスタが同時に一台のエスプレッソマシンを使いたがったら何が起きるのでしょうか。この章では、独立した一群のタスクをどう調整するかを扱います。すべての完了を待つこと、そして同時に実行される数を制限することです。\n\n---\n\n## このページで学ぶこと\n\n* **`DispatchGroup`** を使って、非同期タスクのバッチ全体を待つ方法。\n* `enter()`/`leave()` のバランス、`notify(queue:)`、`wait()`、そしてなぜ `wait()` がブロックするのか。\n* 古典的な `enter`/`leave` の不均衡バグと、それがどうハングしたりクラッシュしたりするのか。\n* **`DispatchSemaphore`** が、一度にリソースに触れるタスクの数をどう制限するのか。\n* グループとセマフォのどちらを使うべきか。\n\nこの章は [GCD の基礎](GCD%20Fundamentals.playgroundchapter/Overview) の章を土台にしています。`async` でキューに作業を積む方法や、シリアルキューと並行キューの違いはすでに知っています。今度はその作業を調整します。\n\n準備ができたら、ページをめくって、ドリンクのバッチをナイーブなやり方で淹れ始め、それがうまくいかない様子を見てみましょう。\n\n1 / 8 ページ  |  [次へ: 問題: すべてが終わったときをどう知るか](@next)";
