我重新开始在我的博客上写文章,并从一个早就该写的话题入手!
经过数年默默驱动我自己制作的几款游戏后,我终于带来了 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
评论 (0)