什么是ECS + Job

单纯的ECS其实对性能提升并不大,那为什么Unity要推ECS,而且1年后铁定抛弃原来的Mono架构?(并不是完全抛弃,UI上任然会使用原来那一套)

因为ECS天生的多线程友好。搭配上Unity的JobSystem,轻松占满100%的Cpu,让cpu全速工作(在多核年代,占满CPU意味着牛逼)。如果到时候你还不会ECS+Job,只能干瞪眼。

好了,接下来要说明的是 ECS 是什么 以及为什么对多线程友好。

E C S    三个字母分别代表的是  Entity  Component System

Entity    在ECS中他仅仅只是作为Component的容器 

Component   你可以把他理解成一个 Struct

System  他拥有一个或多个Component集合  并且带有一个Update方法 每帧对Component里的数据进行操作

定义System时,需要给他注入一个符合规则的Entity集合。这个说法不准确,但好理解。因为,从直观上来说,System选择了这个世界上所有他想要操控的Entity,但其实真正注入的是Entity里装的Component。

例如这个世界上现在存在一个RotSystem,他需求这个世界上所有带Rotation组件(ECS自带),以及带有RotValue组件(自定义的组件,里面只有一个value值用来表示该实体的角速度常量)的Entity。

RotSystem在开始运行前, 会搜索这个世界上所有同时拥有Rotation和RotValue组件的Entity,并把他们的这两个组件注入到自己,进行操作。当用update进行每帧迭代的时候,就会遍历这个Entity(虚拟的)的集合。

这是ECS做的。

因为缓存命中的关系,性能已经有所改善。

但如果每次Update中 要遍历的次数很多,且每次又要完成相对复杂的计算,例如A* 各种AI等

那cpu还是忙不过来的,这时候Job就上场了。他能将一次update中的遍历进行分包,分成多个Job 交给其他核心去跑,

同时ECS的每一次大循环迭代,都会等待所有System中分配的job全部完成 才会进入下一次迭代,保护了游戏逻辑不受多线程影响。

100%Cpu占有率 全速运行  了解一下

猜你喜欢

转载自blog.csdn.net/zwlstc/article/details/86347528
job
今日推荐