Unity手游实战:从0开始SLG——ECS战斗(六)Unity面向数据技术栈(DOTS)

本文介绍了Unity的DOTS技术栈,包括C# Jobs System、多线程编程、Unity ECS、Burst编译器、Mono和IL2CPP。DOTS是Unity的重点发展方向,旨在实现高性能、多线程和数据导向的技术堆栈。文中详细阐述了多线程编程的概念,如进程、线程和协程,并探讨了Unity的ECS系统和Burst编译器如何提升游戏性能。
摘要由CSDN通过智能技术生成

什么是DOTS?

DOTS是Unity一个阶段性的转变,也是Unity蓝图上一个非常重要的里程碑节点。Unity的官网为它建立了主题链接,甚至打出了阶段性的口号: 重建Unity的核心!,可见Unity对DOTS的重视程度。

那么DOTS的含义是什么呢?看下官网的截图:

高性能多线程式数据导向性技术堆栈 。可以看到DOTS的几个关键词, 高性能 、 多线程 、 数据导向 、 堆栈 。

那么它用什么去保障这些关键词呢?

C# jobs System

jobs System 命中了DOTS里的高性能、多线程和堆栈关键字。上一篇我们讲过CPU执行代码片段的大体流程,那么CPU执行程序的流程也基本和上一篇展示的一样。把代码编译成EXE,然后加载进内存、送进CPU中执行。

更详细的过程可以查看这里:https://www.cnblogs.com/fengliu-/p/9269387.html

进程、线程和协程

现在的计算机结构大都是面向线程设计的了,但在计算机诞生早期的时候,计算机经历过从单一的程序处理逐步演变为多任务处理的过程。但不管是单一任务还是多任务,计算机执行的基础单位都是进程(如果这部分的基础确实不强,你可以粗略认为一个EXE就是一个进程)。每一个进程之间是有独立的资源分配的,包括但不限于文本区域、数据区域和堆栈区域。

文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。那么计算机又是怎么执行多个程序的呢?答案就是操作系统。

操作系统统一管控计算机的各个硬件资源,然后按照调度需求分别给不同的进程执行指定的时间片段,因为计算机的处理速度非常快,所以会让用户感觉在同时运行多个程序(进程)。但是这种模式也不是没有成本的,当并行的进程数量过多的时候,切换进程的代价就会非常大,因为它必须要先把当前的上下文存储,然后加载新的上下文,然后执行片段时间,备份存储,再执行下一个进程片段。切换上下文的代价有时候比执行本身的代价还要大。

线程是CPU执行的最小单位了,现在我们说多线程都是指这个。线程是进程中的实体表现,一个进程可以拥有很多个线程,每个线程受CPU独立调度和分派,可以想象Unity移动游戏开发中,Unity的主线程和网络的socket线程就是一个多线程的表现。

现在的计算机因为多核的并行计算,所以已经程序设计也更多的基于多线程的方式去设计了。(这里要理解一个概念,并发和并行。并发就是进程的执行模式,指多个任务在同一时间段内交替执行;并行是线程的执行模式,不同的线程在同一时间段同时执行。)

线程的另一个表现就是资源共享,同一个进程里的不同线程共享内存地址和资源。它自己本身不会申请系统资源(除了运行时必须的那一小点儿),所有的资源都来自于包含它的进程空间,这让程序处理资源更加的快捷和便利,利用多线程的优势来提高计算效率,当然这也正是多线程编程的难点所在。即使在多核CPU和面向线程设计的计算机结构面世怎么多年,仍然不能普及多线程编程。

协程可以简单的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值