现代游戏引擎架构

一、并行编程

1.1 为什么需要并行编程

游戏的渲染计算对算力要求很高,所以我们需要把操作系统的资源利用到极致。

但是摩尔定律已经不在适用了,硬件的发展目前已经达到瓶颈。所以我们需要通过数量来提高计算效率。

1.2 并行编程基础

进程与线程: 进程有独立的存储单元 线程是进程之内的,会共享内存。

在多个线程之间切换,会出现Data Race导致数据出错。因此我们添加了锁的概念。保证同一时间内只有一个线程可以操作修改资源,可是这样又会引起死锁的问题。解决死锁也有很多办法。最著名的就是银行家算法。可以去我的操作系统专栏学习。

解决Data Race也有另外一种方案,就是原子操作。

原子操作,可以不用加锁,但是会浪费CPU资源。

空白的位置就是CPU处于等待状态。

二、并行架构

2.1 固定多线程

用不同的线程,进行不同的逻辑计算。但是这样的话会出现短板木桶效应。快的线程需要等慢的线程结束。

2.2 灵活多线程

多添加几个线程,可以动态分配线程资源。

2.3 Unreal架构

三、任务系统

3.1协程

是一个轻量级的线程,在切换是不需要调用中断,由程序员调用即可。在单一线程内。就是当程序执行一半后通过yield跳到别的方法内,等别的方法完成后再回来。

有状态协程:等回来的时候仍然知道之前的数据


无状态协程:不记录数据

相关推荐
白露与泡影6 小时前
Spring Boot 完整流程
java·spring boot·后端
CandyU26 小时前
Unity —— 数据持久化
unity·游戏引擎
Ghost Face...6 小时前
LS2K1000启动全链路架构解析
架构
zh路西法6 小时前
【Unity实现Oneshot胶卷显形】游戏窗口化与Win32API的使用
游戏·unity·游戏引擎
七夜zippoe6 小时前
工业物联网数据架构设计
物联网·架构·数据·工业物联网·dolphindb
空中海6 小时前
第二章:Maven进阶篇 — 依赖管理与构建生命周期
java·maven
xun-ming6 小时前
AI时代Java程序员自救手册
java·开发语言·人工智能
DavidSoCool6 小时前
GB28181 PTZCmd 完整指令对照表(8 位 16 进制)+ 详细注释 + 使用说明
java·sip·gb28181
黄俊懿6 小时前
MySQL主从复制:从“异步“到“GTID“,数据同步的进化之路
数据库·sql·mysql·oracle·架构·dba·db
张健11564096487 小时前
C++访问控制与友元
java·开发语言·c++