用途:otp-thinking 用于在 Elixir/OTP 项目中指导并发、状态管理与后台处理的设计决策,适合用户提出“添加后台处理”“缓存数据”“异步运行”“处理并发请求”“管理状态”等需求时参考。
主要能力:提出“铁律”——GenServer 按设计就是瓶颈,一次只处理一条消息,创建前需自问是否真需要串行访问、是否会成为吞吐瓶颈、读操作能否通过 ETS 绕过。给出 ETS 模式:GenServer 拥有 ETS 表,写入经 GenServer 串行化,读取用 :read_concurrency 完全绕过。强调不要用 GenServer 包装无状态函数。区分 call/3 与 cast/2 的用途,建议存疑时用 call 保证背压,并用 handle_continue/2 处理初始化后工作。对比 Task.async 与 Task.Supervisor.async/async_nolink 在任务崩溃时的行为差异。说明 DynamicSupervisor 仅支持 :one_for_one,命名应使用 Registry 而非动态创建原子,PartitionSupervisor 可扩展至百万子进程。区分 Registry(单节点)与 :pg(集群范围),并提及 Horde。对比 Broadway(外部队列数据摄取)与 Oban(数据库持久化后台任务),指出 Broadway 不是任务队列。解释监督策略 :one_for_one、:one_for_all、:rest_for_one 所编码的依赖关系,以及用 :max_restarts 和 :max_seconds 防止重启循环。提供抽象决策树与存储选项对照(ETS、:persistent_term、DETS、Mnesia)。介绍 :sys 调试任意 OTP 进程及 Telemetry 事件接入。
使用方式:作为设计参考与检查清单,在编码前依据决策树选择抽象,并对照“红旗”清单重新审视设计。
适用场景:Elixir/OTP 并发架构设计、后台任务选型、监督树规划。
限制:资料未提供安装命令、具体版本要求或收费信息。