主要观点:介绍了结构化并发及其规则,指出背景任务问题及传统使用task::spawn
的方式存在的违反结构化并发规则的情况,提出使用演员模式(actor pattern)来解决该问题,阐述了演员模式的实现方式及与全局的区别,最后得出结论并提供演员模式模板。
关键信息:
- 结构化并发规则:子计算有且仅有一个父,父可有多个子,子不会比父存活更久,程序调用图形成树。
- 背景任务问题:学习结构化并发时常见疑问,如在 HTTP 服务器中如何在函数返回后运行工作,传统使用
task::spawn
创建的后台任务违反结构化并发规则,无法处理错误和取消任务。 - 演员模式:用演员类型发送数据并安排工作,如在
actix
和choo
中用消息,Swift 用方法,可自己用结构体、impl 块和通道实现,示例代码展示了创建演员、运行演员及与 HTTP 服务器结合的方式。 - 演员与全局的区别:将不可达的全局任务池变为可管理的可达任务池,结构化并发以主函数为根,而非程序,使一切可管理和可达,能处理错误等。
重要细节: - 示例中
handler
函数使用演员的句柄发送工作给演员,而不是创建 dangling task。 - 附录 A 提供了简单的演员模式模板,包含消息类型、句柄类型、演员结构体及运行方法的模板代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。