Effect Concurrency 是 Effect 生态系统中的并发处理技能,核心是使用 fiber(轻量虚拟线程)实现并发执行。资料指出:Effect 是惰性、不可变的描述,而 fiber 是带状态的运行执行体。
主要能力包括:用 Effect.fork 创建独立 fiber,用 Fiber.join 等待结果,用 Fiber.await 获取 Exit 值,用 Fiber.interrupt 取消执行,用 Fiber.poll 非阻塞检查状态。并行方面,Effect.all 默认并行运行多个 effect,可通过 { concurrency: 1 } 改为顺序、通过数值限制并发数,并用 batching: true 启用批处理;Effect.forEach 支持并发迭代与模式。
竞态方面提供 Effect.race(最先完成者胜出)与 Effect.raceAll,并可按资料所示组合 Effect.sleep 与 Effect.fail 实现超时竞态。中断方面支持 Fiber.interrupt、父 fiber 退出时自动中断,以及 Effect.uninterruptible 与 Effect.interruptible 划分可中断区域。
生命周期与清理:Effect.forkDaemon 创建不随父退出的守护 fiber;Effect.forkScoped、Scope.make 与 Effect.forkIn 把 fiber 绑定到作用域,作用域关闭时自动中断。高级模式包括基于 Queue 的工作池、并行 map-reduce、以及基于 RequestResolver.makeBatched 的请求去重与批处理。
适用场景:需要并行执行多个操作、构建高性能数据管道、处理并发用户请求、实现后台 worker、竞速多个数据源、为操作添加超时、构建并发任务处理器、管理 fiber 生命周期、实现请求去重、通过批处理提升吞吐量时使用。
限制与注意事项:资料强调不要在有 Effect.all 可用时手动 fork;应设置并发上限避免资源耗尽;清理代码需放在不可中断区域;避免无限循环;给长操作加超时;用 Fiber.await/poll 监控状态;谨慎使用守护 fiber 以防内存泄漏。常见陷阱包括 fork 后忘记 join 导致结果丢失、无并发限制、未处理中断、共享可变状态引发竞态、死锁、忽略失败、过度 fork、缺少超时以及误用顺序模式。相关技能包括 effect-core-patterns 与 effect-resource-management。具体安装命令、收费与价格、支持的平台版本等资料暂未提供。