ECS入门了解

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 云服务器ECS(Elastic Compute Service)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩

CPU与缓存(Cache)
首先我们先来了解一下CPU读取数据时的操作,首先CPU会先从自己的缓存中去查找,如下图,有L1/ L2/ L3三级缓存,若缓存中没有找到需要的数据,则会去内存中查找(我们称之为Cache Miss),CPU读取到内存数据后就会将新数据存放在缓存当中。CPU访问内存的速度会比访问L1 Cache的速度慢100倍,因此提高缓存命中率(Cache Hit),避免Cache Miss会大大提高性能。因此我们应该尽量使用数组,尽量分割属性(SOA),尽量连续的进行处理。

这也使得一味的讨论复杂度O(n)不再适用,因为现在效率=数据+代码,最常见的例子就是在数据量小的情况下遍历数组会比 (Hash)Map 快上很多
缓存行
缓存又由若干个缓存行(cache line)组成,每个缓存行大概占64字节。

假设我们现在想要旋转并移动场景中的一个物体,那么我们会修改它的Position(Vector3数据,3个float)和Rotating(Quaternion,4个float),其中1个float占4字节,那么一共占28字节,那么在这个缓存行就会有36个字节是完全浪费的,甚至我们可能只改了Position的x的值,这样浪费的就更多。若有上千个这样的方块,那么我们缓存中可能就会存在超50%的内存垃圾,从而导致缓存命中率大大的降低。

问题的引出
了解了上面的知识之后,我们再看回Unity,在传统模式下,我们在场景中创建一个Cube,上面会有Transform,MeshRenderer,Collider等组件,而这些组件在内存中的排放都是无序的,这就会降低我们的缓存命中率。
由于可以在运行时给Entity动态的添加或删除Component,若我们将Entity A的Renderder删除,则此时Entity A会隶属于Archetype N,若再删除Rotation,则剩下的Component组合和Archetype M,Archetype N都不相同,就好隶属于一个新的Archetype。

Memory Chunks
ECS会根据Archetype来进行分配内存,每个内存块我们称之为Chunk,ECS会将符合Chunk对应Archetype的Entity放在该Chunk当中。一个Chunk中,内存地址是连续的,大小固定为16KB。若Chunk装满了,则会生成一个新的Chunk用来存储新生成的且Archetype符合的Entity。

由于我们动态的添加或删除Entity的Component,会导致其Archetype变化,因此ECS也会改变其Chunk,放到与之对应Chunk中。

可能描述的不太好,我们来看示例图。下图中有三种Archetype,分别对应三种Component组合。每个Archetype都会有对应的Chunk用来存储对应的Entity。若Chunk存储满了,就会在对应Archetype下新生成一个Chunk。

这样的设计理念使Archetypes and Chunks是一对多的关系,同时若给定一个Component组合,我们要找到所有对应的Entity,只需要搜索现有的archetype即可,而不需要遍历所有的Entity。

ECS不支持使用特殊的排序来将Entity存储进Chunk中,若有一个Entity被创建或者被改变,使其隶属于一个新的Archetype时,ECS会将其存储在该Archetype下第一个还有空间的Chunk中。若有一个Entity被从Chunk中移除,ECS则会把该Chunk中最后一个Entity与其对应的Component移到这个空缺的位置中。

举例
关于Entity,Component,Archetype和Chunk的关系,我们在此举个简单的例子。假设我们有两个Component:C1和C2,然后我们生成五个Entity,其对应的Component分别为:E1(C1,C2),E2(C1),E3(C1,C2),E4(C1,C2),E5(C2)。由于组合分别有C1,C2,C1C2三种,所以会有三个Archetype,假设我们一个Chunk只能存储两个Entity。那么最终结果为:

Archetype1:Chunk1 [ E1(C1,C2),E3(C1,C2) ] -> Chunk2 [ E4(C1,C2) ]

Archetype2:Chunk1 [ E2(C1) ]

Archetype3:Chunk1 [ E5(C2) ]

结合到我们前面有关缓存的知识,若我们要移动选择一个方块,可能会写两个Component,MoveComponent存x和y两个float(假设只前后左右移动),RotateComponent只存y一个float(假设只旋转y轴),这样我们的方块就只会有3个float,占用12个字节。若有多个相同的方块,由于都有上述两个Component,也就是属于同一种Archetype,因此内存也是连续的。那么在一个64字节的缓存行中,我们可以放下5个这样的方块数据,只有4字节是浪费的,就会大大降低Cache Miss。

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
弹性计算 数据可视化 Ubuntu
《Palworld/幻兽帕鲁》阿里云专用服务器搭建部署从入门到精通:2024年最新教程!
随着《幻兽帕鲁》的风靡,越来越多的玩家希望拥有属于自己的游戏服务器,以获得更加稳定和私密的游戏体验。今天,就为大家带来一份详细的新手教程,教您如何在阿里云上轻松搭建《幻兽帕鲁》专用服务器。 首先,您需要一台服务器。在这里,我们推荐使用阿里云服务器。它不仅稳定可靠,而且提供了丰富的幻兽帕鲁服务器搭建模板,让您轻松上手。
70 0
|
1月前
|
网络协议
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)(下)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
63 2
|
11天前
|
弹性计算 负载均衡 定位技术
阿里云服务器地域怎么选?看这一篇文章就够了,小白入门
阿里云服务器地域选择应考虑速度延迟、内网互通、价格差异和备案限制。建议用户根据所在地区就近选择,以减少网络延迟。同一地域内的产品可实现内网互通,不同地域间则无法跨地域部署负载均衡或使用内网连接。价格因地域而异,部分区域可能有优惠。此外,若需在中国内地进行网站经营性备案,需选择特定地域如北京或深圳。详细信息参考阿里云官方页面。
54 5
阿里云服务器地域怎么选?看这一篇文章就够了,小白入门
|
21天前
|
关系型数据库 应用服务中间件 数据库
编程入门(一)【Web服务器环境的部署】
编程入门(一)【Web服务器环境的部署】
36 1
|
1月前
|
PyTorch TensorFlow 算法框架/工具
【科研入门】搭建与配置云服务器的论文环境
本文介绍了如何搭建云服务器并配置论文代码环境,以AutoDL平台为例。首先,租用服务器并选择符合代码需求的镜像版本,如Python 3.7、TensorFlow 1.15和PyTorch。接着,启动服务器进入终端,克隆项目代码并使用Conda创建隔离的环境安装所需包。如果需在Pycharm中工作,还需在Pycharm内创建相同环境。最后,根据项目配置安装Tensorflow和PyTorch,遇到缺失包时通过`pip install`补充。完成配置后,可克隆服务器以备后续使用。遇到版本不兼容问题,可调整Conda环境的Python版本。
170 1
【科研入门】搭建与配置云服务器的论文环境
|
1月前
|
弹性计算 运维 安全
手把手教你入门部署幻兽帕鲁服务器:2024年阿里云搭建幻兽帕鲁Palworld联机服务器新手教程
手把手教你入门部署幻兽帕鲁服务器:2024年阿里云搭建幻兽帕鲁Palworld联机服务器新手教程。对于热衷《幻兽帕鲁》这款开放世界生存制作游戏的粉丝而言,拥有个人游戏服务器无疑是令人心动的。这款由Pocketpair开发的游戏,在2024年1月18日推出了其抢先体验版,它凭借广阔的游戏世界和丰富的玩法——如收集神奇的生物“帕鲁”,让它们参与战斗、建造、农耕和工业生产等——赢得了大量玩家的喜爱。现在,我将为大家详细指导如何在阿里云服务器上轻松一键部署《幻兽帕鲁》的联机服务器。
1143 2
|
1月前
|
数据采集 网络协议 搜索推荐
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
80 0
|
1月前
|
云安全 弹性计算 Linux
【玩转幻兽帕鲁部署】阿里云幻兽帕鲁服务器搭建1分钟搞定:从入门到精通
【玩转幻兽帕鲁部署】阿里云幻兽帕鲁服务器搭建1分钟搞定:从入门到精通。
|
10月前
|
Sentinel 微服务
微服务组件(高并发带来的问题 服务器雪崩效应 Sentinel入门)2
微服务组件(高并发带来的问题 服务器雪崩效应 Sentinel入门)2
73 0
|
11月前
|
Web App开发 存储 C#
C# 10分钟入门基于WebOffice实现在线编辑文档,实时保存到服务器(所有office,兼容WPS)
C# 10分钟入门基于WebOffice实现在线编辑文档,实时保存到服务器(所有office,兼容WPS)