树状并发 II:用参与者替代后台任务

主要观点:介绍了结构化并发及其规则,指出背景任务问题及传统使用task::spawn的方式存在的违反结构化并发规则的情况,提出使用演员模式(actor pattern)来解决该问题,阐述了演员模式的实现方式及与全局的区别,最后得出结论并提供演员模式模板。
关键信息

  • 结构化并发规则:子计算有且仅有一个父,父可有多个子,子不会比父存活更久,程序调用图形成树。
  • 背景任务问题:学习结构化并发时常见疑问,如在 HTTP 服务器中如何在函数返回后运行工作,传统使用task::spawn创建的后台任务违反结构化并发规则,无法处理错误和取消任务。
  • 演员模式:用演员类型发送数据并安排工作,如在actixchoo中用消息,Swift 用方法,可自己用结构体、impl 块和通道实现,示例代码展示了创建演员、运行演员及与 HTTP 服务器结合的方式。
  • 演员与全局的区别:将不可达的全局任务池变为可管理的可达任务池,结构化并发以主函数为根,而非程序,使一切可管理和可达,能处理错误等。
    重要细节
  • 示例中handler函数使用演员的句柄发送工作给演员,而不是创建 dangling task。
  • 附录 A 提供了简单的演员模式模板,包含消息类型、句柄类型、演员结构体及运行方法的模板代码。
阅读 11
0 条评论