/* Page prose (zh-Hans) */
"DistributedFourPieces" = "# 四个组成部分\n\n四样东西协同工作。值得给每一个都起个名字。\n\n---\n\n## 1. `distributed actor` 本身\n\n这个类型。和本地 actor 一样，它拥有隔离的状态。和本地 actor 不同的是，它*必须*和一个 actor 系统关联，并且它获得了一个可以交给其他进程的身份（稍后细说）。\n\n---\n\n## 2. `distributed` 方法\n\n你通过网络暴露出去的那部分方法。每一个都是一条潜在的**远程消息**。任何没有标记 `distributed` 的东西，都只对持有本地引用的人保持私有。\n\n---\n\n## 3. `ActorSystem`：传输层与运行时\n\n这是本地 actor 里没有对应物的部分，也是整个模型的核心。**actor 系统**是真正定位 actor 并在它们之间传递消息的运行时：它分配身份、序列化参数、通过某个连接发送字节，并在远端投递调用。\n\n你通常不会自己写一个。你会使用一个现成的实现。2026 年最著名的是 **`ClusterSystem`**，来自 Apple 开源的 Distributed Cluster 包，它把服务器端的 Swift 进程连成一个集群。工具链还附带了一个 `LocalTestingDistributedActorSystem`，用于在测试中演练分布式代码而无需真实的网络。无论哪种方式，actor 系统都是一个*你引入的依赖*，这正是它无法在 Swift Playground 中运行的原因。\n\n你在创建 actor 时把系统交给它：\n\n```swift\n// `system` is an already-running ClusterSystem.\nlet ledger = Ledger(actorSystem: system)\n```\n\n那个 `actorSystem:` 参数不是你手写的：编译器会合成一个接收它并把它接好的初始化器。系统现在对这个 actor 负责：它给了它一个身份，并且知道如何把消息路由到它。\n\n---\n\n## 4. `ID`\n\n当 actor 系统接纳一个 actor 时，它给它盖上一个 **`ID`**，一个针对*这个特定 actor 实例*的、唯一且可序列化的名字，取自系统自己的 `ActorID` 类型。ID 正是让 actor 能从另一个进程被找到的东西。\n\n如果分行 A 知道住在分行 B 服务器上的某个账本的 ID，它就可以**解析**出一个指向它的引用并开始调用方法，而无需持有真正的对象：\n\n```swift\n// Branch A resolves a remote ledger it never constructed.\nlet remoteLedger = try Ledger.resolve(id: knownID, using: system)\ntry await remoteLedger.deposit(50)\n```\n\n`resolve(id:using:)` 不会获取 actor 的状态，也不会把它复制过来。它返回一个**远程引用**，一个本地替身，把每一次调用都通过网络转发给真正的 actor。状态留在分行 B 原地不动；只有*消息*在旅行。\n\n[上一页](@previous)  |  第 4 / 9 页  |  [下一页: async 与 throws](@next)";
