Unity中 JobSystem使用整理
Unity 的JobSystem允许创建多线程代码,以便应用程序可以使用所有可用的 CPU 内核来执行代码,这提供了更高的性能,因为您的应用程序可以更高效地使用运行它的所有 CPU 内核的容量,而不是在一个 CPU 内核上运行所有代码。
可以单独使用JobSystem,为了提高性能,可以和Burst 编译器一块使用,Burst 编译器改进了代码生成,从而提高了移动设备的性能并减少了电池消耗。
还可以将JobSystem与 Unity 的实体组件系统结合使用,以创建高性能的面向数据的代码。
概念:
单线程:一次执行一条指令,并且一次产生一个结果。加载和完成程序的时间取决于 CPU 需要完成的工作量。
多线程:利用了 CPU 在多个核心上同时处理多个线程的能力。这种情况下不是逐个执行任务或指令,而是同时运行任务或指令。
什么是多线程? - Unity 手册
JobSystem:通过创建Job而不是线程来管理多线程代码,将创建的Job放入Job队列中等待执行,工作线程从Job队列中获取并执行Job,用依赖关系来确保Job用适当的顺序执行。
Job:完成一项特定任务的一个小工作单位,会接收参数并对数据进行操作,可以是独立的,也可依赖其他作业完成之后才能运行。
Job依赖关系: 如果jobA依赖于jobB,系统将确保jobA不会在jobB完成之前开始执行。
什么是作业系统? - Unity 手册
优势:
1.多线程并行计算:利用多核CPU提升性能。
2.无GC分配:使用 Native 容器避免托管堆分配。
3.Burst 编译优化:生成高效原生代码(性能提升5-10倍)。
使用:
1.安装
通过Package Manager添加
通过Git URL地址搜索Job System包
com.unity.jobs:Job System 的核心功能包。
搜索到Jobs包后点击右下角Import
2.JobSystem使用入门:
1.NativeContainer:
2.创建Job:
3.调度Job:
4.JobHandle 和依赖项:
5.ParallelFor Job:
6.ParallelForTransform Job:
3.注意事项:
1.不要从Job访问静态数据。
2.不要更新 NativeContainer 内容。
3.调用 JobHandle.Complete 以重新获得所有权。
4.在适当时间使用 Schedule 和 Complete 方法。
5.将 NativeContainer 类型标记为只读。
6.不要在Job中分配托管内存。
C# 作业系统提示和故障排除 - Unity 手册
未完待续。。。
参考链接:
什么是作业系统? - Unity 手册
ArtStation - Unity Job System in Practice. How we increased FPS from 15 to 70 in our game