用途:该技能用于掌握 Elixir 的 OTP(Open Telecom Platform)模式,构建并发、容错的应用程序,内容覆盖 GenServer、Supervisor、Agent、Task 及其他 OTP 行为。
主要能力:\n1. GenServer:示例涵盖客户端 API 与服务端回调分离,如 start_link、handle_call、handle_cast、init、handle_info;含状态管理(UserCache 的增删查)、超时处理(SessionManager 的 :timeout 消息)以及 terminate/2 资源清理(FileWatcher)。\n2. Supervisor:演示 :one_for_one、:one_for_all、:rest_for_one 三种策略,以及在 Application 中组织子进程。\n3. DynamicSupervisor:用于动态启停任务,如 TaskSupervisor.start_child 与 terminate_child。\n4. Agent:处理简单状态,提供 update/get/reset。\n5. Task:用于异步操作,示例含 Task.async、Task.await_many 与 Task.Supervisor 的受管任务。\n6. Registry:通过 via 元组实现动态进程查找,如 {:via, Registry, {MyApp.Registry, {:user_session, user_id}}}。\n7. ETS:与 GenServer 结合做缓存,示例使用 :ets.new、:ets.lookup、:ets.insert。\n 适用场景:构建隔离进程的并发应用、用监督树实现容错系统、跨进程生命周期管理状态、异步任务工作池、实时多用户系统、发布订阅或事件驱动架构、分布式进程通信、长时间后台作业、可扩展 Web 服务器与 API。\n 使用方式与最佳实践:有状态、逻辑复杂用 GenServer;简单状态用 Agent;一次性异步操作用 Task;始终定义合理的监督策略;动态进程查找用 Registry;处理超时;在 terminate/2 中清理资源;用 via 元组注册命名进程;分离客户端 API 与服务端回调;保持 handle_* 函数聚焦。\n 常见陷阱:未实现合适监督策略、用长耗时的 GenServer 调用造成阻塞、忘记处理 :timeout、未在 terminate/2 清理资源、在需要同步确认时误用 cast、创建过多进程、未处理进程退出、将大体积数据存入进程状态而非 ETS、未用 Registry 管理动态进程、忽略异步操作中的背压。\n 限制:资料未提供该技能的具体安装方式、收费、价格或评测效果,相关内容暂未提供。