/* Page prose (ja) */
"ActorsWrappingUp" = "# まとめ\n\nactor は、[並行処理の落とし穴](Concurrency%20Hazards.playgroundchapter/Overview)の章であなたが手作業で修正した data race を受け取り、一度に 1 つのタスクだけを状態の中に入れることで、その修正をコンパイラが強制する保証に変えます。共有状態を*安全*にするために手を伸ばしてください。コードを*速く*するためではありません。2 つの微妙な点、再入と、actor から逃げ出すものは、本当の学びが宿るところなので、下のまとめを注意深く吟味してください。\n\n* **actor** は参照型で、**一度に 1 つのタスク**を中に入れることで自身の可変状態を保護し、その状態に対する data race を構造的に排除します。手作りのシリアルキューによる修正を置き換え、コンパイラが保護を強制するので、うっかり飛ばす方法はありません。\n* **外**から分離された状態にアクセスするには `await` が必要です（順番を待つかもしれません）。**内**からのアクセスは同期的です。`nonisolated` は、不変の状態にしか触れないメンバーを対象外にします。\n* **再入:** actor はすべての `await` で解放されるので、別のタスクが入れます。`await` の前に読んだ値は、そのあとで変わるかもしれません。確認してから動く処理をサスペンドのない状態に保つか、再開後に確認し直しましょう。\n* actor は**安全性であって、速度ではありません。** アクセスをシリアル化するので、1 つの actor に通されたホットパスはボトルネックになります。共有される可変状態を保護するために使い、作業を並列化するためには使わないでください（それはタスクグループの役目です）。\n* actor やタスクの境界を越える値は **`Sendable`** でなければなりません。値型はたいていそうですが、素朴な可変クラスはそうではありません。actor は状態が中にある間だけそれを保護するので、可変クラスの参照を返すと競合が再び開いてしまいます。\n\n---\n\n## 次は\n\n次の章、[グローバル actor と Sendable](Global%20Actors%20and%20Sendable.playgroundchapter/Overview)では、作業を UI スレッドに固定する `@MainActor` を紹介し、型を共有しても安全にするものは何かという物語の全体を語ります。\n\n[前へ](@previous)  |  7 / 7 ページ";
