我重新开始在我的博客上写文章,并从一个早就该写的话题入手!

经过数年默默驱动我自己制作的几款游戏后,我终于带来了 Svelto.Tasks 2.0

Svelto.Tasks 是一个与引擎无关、支持多线程且零分配的任务运行器,专为 C# 设计,源于游戏开发中对一个以游戏为核心、具备 .NET 任务无法提供的特性的任务框架的需求。其核心理念很简单:

任务是迭代器块。运行器是调度器。与将执行时机和上下文交给运行时不同,运行器让你决定:

  • 任务何时推进,
  • 任务在哪里运行——主线程还是专用工作线程,
  • 每帧执行多少工作,
  • 以及整个任务上下文何时必须停止。

最后一点在游戏中非常重要:例如,当一局比赛结束时,我希望该比赛相关的每个任务都随之停止——而不是依赖一个传递到每个层并需要正确检查的 CancellationToken。

Svelto.Tasks 支持 轻量级协程、可组合任务(带返回值与延续)、后台运行器、有界并行批次、对象池、性能分析钩子,以及可选的 Unity/Burst 集成

它还与 async/await 互操作,尽管 .NET 任务桥接和 Unity Burst 工作路径目前属于实验性功能,需要真实世界反馈。

它并非 Unity Jobs 的替代品——但在那些执行控制、生命周期、节奏和性能分析为优先需求的工作负载中,它提供了一个有用的替代方案。

仓库包含可运行的 .NET 示例、测试和基准测试

🔗 https://github.com/sebas77/Svelto.Tasks

另外,仓库

🔗https://github.com/sebas77/Svelto.Tasks.Examples

展示了如何用它简化大规模并行同步。这个示例本身也相当有趣,因为它使用了新的 Unity 计算缓冲区 API BeginWrite/EndWrite 来上传计算缓冲区,并用图形栅栏实现 CPU/GPU 同步。

文章地址:

🔗 https://www.sebaslab.com/svelto-tasks-2-0-efficient-multi-threaded-task-management-for-csharp/

玩得开心!(欢迎反馈,也欢迎加入我的 Discord 服务器:https://discord.com/invite/uuTCYewjtc)

插图:

https://preview.redd.it/wnaofpp7banh1.png?width=2550&format=png&auto=webp&s=c7f36a79571239ab16dfaf8afd0b02ebe3e1c6d8