现代游戏引擎架构

一、并行编程

1.1 为什么需要并行编程

在这里插入图片描述
游戏的渲染计算对算力要求很高,所以我们需要把操作系统的资源利用到极致。
在这里插入图片描述
但是摩尔定律已经不在适用了,硬件的发展目前已经达到瓶颈。所以我们需要通过数量来提高计算效率。

1.2 并行编程基础

进程与线程: 进程有独立的存储单元 线程是进程之内的,会共享内存。
在这里插入图片描述

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

解决Data Race也有另外一种方案,就是原子操作。
在这里插入图片描述
原子操作,可以不用加锁,但是会浪费CPU资源。
在这里插入图片描述
空白的位置就是CPU处于等待状态。

二、并行架构

2.1 固定多线程

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

2.2 灵活多线程

在这里插入图片描述
多添加几个线程,可以动态分配线程资源。

2.3 Unreal架构

在这里插入图片描述

三、任务系统

3.1协程

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

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

在这里插入图片描述
无状态协程:不记录数据

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS - GCC 版本升级解决方案

Mac 中自带的 GCC 版本是 4.2.1,由于版本太低,在很多操作的时候会报错。因此需要对其进行升级,这里使用 Homebrew 来下载最新的 GCC。 安装 Homebrew MacOS 的终端中输入如下的命令来安装 Homebrew $ /usr/bin/ruby -e "$(curl -fsSL …

sqlite3 交叉编译

#1.下载源码并解压 源码路径如下,下载autoconf版本 SQLite Download Page 解压 tar -zxvf sqlite-autoconf-3450200.tar.gz cd sqlite-autoconf-3450200 mkdir build # 2. 配置源代码 # 假设你已经安装了交叉编译工具链,如gcc-arm-linux-gnueabih…

Tkinter 一文读懂

Tkinter 简介 Tkinter(即 tk interface,简称“Tk”)本质上是对 Tcl/Tk 软件包的 Python 接口封装,它是 Python 官方推荐的 GUI 工具包,属于 Python 自带的标准库模块,当您安装好 Python 后,就可…

基于python+vue的BBS论坛系统flask-django-nodejs-php

本系统为用户而设计制作BBS论坛系统,旨在实现BBS论坛智能化、现代化管理。本BBS论坛自动化系统的开发和研制的最终目的是将BBS论坛的运作模式从手工记录数据转变为网络信息查询管理,从而为现代管理人员的使用提供更多的便利和条件。使BBS论坛系统数字化、…

关于短群签名论文阅读

参考文献为2004年发表的Short Group Signatures 什么群签名? 群签名大致就是由一组用户组成一个群,其中用户对某条消息的签名,改签名不会揭示是哪一个用户签署的,签名只能表明该消息确实是来自该群的签名。对于群还有一个群管理者…

Spring Boot 3 极速搭建OAuth2认证框架

本篇环境 Java 17Spring Boot 3.2.3Spring Authorization Server 1.2.3开发工具 SpringToolSuite4Spring Boot 3.2.3 需要JDK 17及之上的版本。 项目初始化 项目可以使用Spring的初始化器生成, 也可以创建一个Maven类型的项目。 项目创建后的目录结构如下: 项目配置 使用 …

几个常用的控件(2)

目录 一、单选按钮Radiobutton和RadioButtonList 1、Radiobutton控件 (1)button控制方式 (2)Radiobutton控制方式 2、RadiobuttonList控件 二、列表框ListBox和下拉列表DropdownList 1、ListBox 2、DropdownList 三、面板…

【Java】二叉搜索树

文章目录 一、搜索树二、使用代码实现一棵二叉搜索树1.查找2.插入3.删除(重点) 总结 一、搜索树 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值…

练习 12 Web [极客大挑战 2019]BabySQL

本题复习:1.常规的万能语句SQL查询,union联合查询,Extractvalue()报错注入 extractvalue(1,concat(‘0x7e’,select(database())))%23 我一开始挨着试,感觉都无效 直到报错注入,查到了库名‘geek’ 尝试查表名&…

Ubuntu下采用VSCode调试C/C++ (1)

对于如何在VSCode上调试C/C,网上已经有足够多的方案,主要是在VSCode上安装:C/C拓展和Code Runner,以及launch.json、tasks.json及c_cpp_properties.json相关的配置。 但是,按照网上的一套操作之后却运行不起来&#xf…

重新配置node.js,npm,环境变量

起因是检查最近收到的一些朋友分享给我的各种资料,什么前端,后端,java,go,python等语言,想着将一个模拟QQ音乐的一个源代码进行跑通,看看有什么特别之处。如下图 出现了node环境路径问题,参考链接 https:/…

使用CSS3画出一个叮当猫HTML源码

我们经常使用PS或者Flash制作动画&#xff0c;本文则介绍了如何用CSS3画出个叮当猫&#xff0c;实现过程很有趣&#xff0c;感兴趣的朋友可以参考一下 首先&#xff0c;先把HTML结构搭建好&#xff1a; <div class"wrapper"> <!--叮当猫整体--> <di…

Java中的Stream流

一、介绍 1. Stream流的作用 结合了Lambda表达式&#xff0c;简化集合、数组的操作。 2. Stream流的使用步骤 ①先得到一条Stream流&#xff0c;并把数据放上去&#xff1b; 获取方式方法名说明单列集合default Stream<E> stream()Collection中的默认方法双列集合无无…

【ubuntu的python报错】/usr/bin/env: “python3\r”: 没有那个文件或目录

【ubuntu的python报错】/usr/bin/env: “python3\r”: 没有那个文件或目录 通过apt-get命令安装dos2unix的包&#xff0c;然后通过dos2unix这个命令即可完成转换。 通过apt-get命令安装dos2unix的包&#xff0c;然后通过dos2unix这个命令即可完成转换。 sudo apt-get install …

git -- 提交规范

参考链接 – 1 参考链接 – 2 参考链接 – 3 以下常见的Git代码提交规范,可以根据团队的具体情况进行调整和补充。重要的是,团队成员要保持一致性,遵守代码提交规范,以便更好地协作和维护代码库。 为什么使用同一提交代码规范有如下原因: 自动化生成 CHANGELOG。基于提交的…

是德科技keysight N1912A双通道功率计

181/2461/8938产品概述&#xff1a; Keysight(原Agilent) N1912A P系列双通道功率计可提供峰值、峰均比、平均功率、上升时间、下降时间、最大功率值、最小功率值以及宽带信号的统计数据。 Keysight(原Agilent) N1912A P系列双通道功率计, 可提供峰值、峰均比、平均功率、上升…

Redis安装详细教程

Redis安装详细教程 文章目录 Redis安装详细教程前言一、windows下安装Redis1、下载地址2、启动redis服务3、连接redis 二、Linux下安装Redis&#xff1a;直接安装1、下载并安装 三、Linux下安装Redis&#xff1a;Docker中安装 前言 一、windows下安装Redis 1、下载地址 官方下…

Docker 容器中运行 JAR 文件的方法

由于 Docker 容器通常需要一个操作系统级环境来运行应用程序&#xff0c;而 JAR 文件&#xff08;Java ARchive&#xff09;是一个包含 Java 应用程序或库的文件&#xff0c;需要 Java 运行时环境&#xff08;JRE&#xff09;来执行。 以下是运行 JAR 文件的基本步骤&#xff…

冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序的递归版。(直接可用,懒人必备)。

注意&#xff1a;1.在使用前需要先将Swap函数放在最前面。基本上都用了了Swap函数。 2.完成的是升序版本&#xff0c;如想逆序&#xff0c;自行更改。 目录 Swap函数&#xff1a; 冒泡排序&#xff1a; 选择排序 插入排序 希尔排序 堆排序 快速排序 Swap函数&#xff1a…

Vue 3项目中结合Element Plus的<el-menu>和CSS3创建锚点,以实现点击菜单项时平滑滚动到对应的锚点目标

安装Element Plus&#xff1a; 确保已经安装了Element Plus库。可以使用npm或者yarn进行安装&#xff0c;具体步骤与上文提到的相同。 引入Element Plus&#xff1a; 在你的Vue 3项目中引入所需的Element Plus组件和样式。 创建el-menu&#xff1a; 在Vue组件中使用<el-me…