ECS入门了解

简介: 云服务器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。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
弹性计算 数据可视化 Ubuntu
《Palworld/幻兽帕鲁》阿里云专用服务器搭建部署从入门到精通:2024年最新教程!
随着《幻兽帕鲁》的风靡,越来越多的玩家希望拥有属于自己的游戏服务器,以获得更加稳定和私密的游戏体验。今天,就为大家带来一份详细的新手教程,教您如何在阿里云上轻松搭建《幻兽帕鲁》专用服务器。 首先,您需要一台服务器。在这里,我们推荐使用阿里云服务器。它不仅稳定可靠,而且提供了丰富的幻兽帕鲁服务器搭建模板,让您轻松上手。
85 0
|
4月前
|
网络协议
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)(下)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
120 2
|
1月前
|
前端开发 网络协议 物联网
Django Web:搭建Websocket服务器(入门篇)
Django Web:搭建Websocket服务器(入门篇)
36 1
|
2月前
|
前端开发 JavaScript
【node写接口】 通过node 快速搭建一个服务器、get请求、post请求 小白入门
【node写接口】 通过node 快速搭建一个服务器、get请求、post请求 小白入门
65 4
|
3月前
|
弹性计算 负载均衡 定位技术
阿里云服务器地域怎么选?看这一篇文章就够了,小白入门
阿里云服务器地域选择应考虑速度延迟、内网互通、价格差异和备案限制。建议用户根据所在地区就近选择,以减少网络延迟。同一地域内的产品可实现内网互通,不同地域间则无法跨地域部署负载均衡或使用内网连接。价格因地域而异,部分区域可能有优惠。此外,若需在中国内地进行网站经营性备案,需选择特定地域如北京或深圳。详细信息参考阿里云官方页面。
585 5
阿里云服务器地域怎么选?看这一篇文章就够了,小白入门
|
3月前
|
小程序 数据安全/隐私保护
阿里云新手入门:注册账号、实名认证、申请免费云服务器
阿里云新手指南:注册账号(手机号或支付宝快捷注册),完成实名认证(个人/企业)。通过免费服务器获取3个月试用。创建后,设置密码,远程连接,配置安全组规则,部署应用,如建站与环境安装。详询官方教程。
|
2月前
|
网络协议 网络架构
【网络编程入门】TCP与UDP通信实战:从零构建服务器与客户端对话(附简易源码,新手友好!)
在了解他们之前我们首先要知道网络模型,它分为两种,一种是OSI,一种是TCP/IP,当然他们的模型图是不同的,如下
120 1
|
2月前
|
弹性计算 网络安全 数据安全/隐私保护
阿里云服务器新手入门:注册账号、实名认证申请免费云服务器全流程
注册阿里云账号,选择注册方式如密码、扫码或手机号,并完成验证码验证。接着进行实名认证,提供必要个人信息或企业证件。然后,在控制台选择云服务器ECS,点击“免费试用”申请,配置实例并设置登录密码。创建后,通过远程连接工具如SSH登录,开始使用服务器进行软件安装、应用部署等操作。阿里云提供详细文档支持。别忘了点击链接以直接试用。
147 0
|
2月前
|
小程序 数据安全/隐私保护
阿里云服务器新手入门:注册账号、实名认证申请免费云服务器全流程
阿里云新手指南 1. 注册阿里云账号,支持手机号或支付宝等快捷注册。 2. 完成实名认证,个人/企业选择相应类型。 3. 访问免费服务器申请页面 4. 创建后,设置密码,通过安全组开通端口。 5. 使用教程包括远程连接、部署应用等,详细步骤见阿里云帮助中心。
90 0
|
3月前
|
关系型数据库 应用服务中间件 数据库
编程入门(一)【Web服务器环境的部署】
编程入门(一)【Web服务器环境的部署】
83 1