当前位置: 首页 > news >正文

Unity Dots理论学习-2.ECS有关的模块(1)

Unity的实体组件系统(ECS)是支撑DOTS模块和技术的面向数据架构。ECS为Unity中的内存数据和runtime进程调度提供了高度的控制和确定性。

ECS for Unity 2022 LTS 配备了两个兼容的物理引擎,一个高级的Netcode package,以及一个用来将大量ECS数据渲染到Unity的可编程渲染管线(SRP)、通用渲染管线(URP)和高清晰度渲染管线(HDRP)的渲染框架。这套ECS框架与GameObject数据兼容,允许你使用一些Unity 2022 LTS中尚未原生支持ECS的系统,如动画、导航、输入或地形。

本节重点介绍DOTS的功能,以及它们如何帮助开发者避免前面提到的会造成CPU性能瓶颈的代码。

学习有关DOTS具体内容的最佳起点是EntityComponentSystemSamples Github,它包含了说明书和视频的同时还包含许多示例工程。

然而,在深入学习这些示例之前,我们先来看看用于构建这套技术栈的功能和模块。

C#job系统

C#job系统提供了一种简单高效的方式来编写多线程代码,帮助你的应用充分利用所有可用的CPU核心。

与DOTS的其他功能不同,job系统不是一个单独的模块,而是包含在Unity核心模块中。

因为MonoBehaviour的更新只在主线程上执行,所以许多Unity游戏最终都会把所有游戏逻辑都运行在一个CPU核心上。为了利用额外的核心,你可以手动创建和管理额外的线程,但这样做在提高代码难度的同时又提高了代码风险。

作为一种更简单的替代方案,Unity提供了C#job系统:

job系统维护一个job线程池,每个目标平台的额外核心对应一个线程。例如,当Unity在八个核心上运行时,它会创建一个主线程和七个job线程。

job线程执行称为job的工作单元。当job线程空闲时,它会从job队列中拉取下一个可用的job进行执行。

一旦某个job开始在job线程上执行,它就会一直执行到完成(换句话说,job不会被抢占)

job的调度和完成

job只能被主线程调度(即,添加到job队列中),不能从其他job中被调度。

当主线程调用已调度job的Complete()方法时,它会等待job完成执行(如果job尚未完成)。

只有主线程可以调用Complete()。

Complete()返回后,你可以确定job使用的数据在主线程上可以再次安全访问,并且可以安全地传递给后续的被调度的job。

job安全性检查和依赖关系

在多线程编程中,确保线程安全和管理线程之间的依赖关系对于避免竞态条件、数据损坏和其他并发问题至关重要。解释这些陷阱超出了本指南的范围。关键的要点是理解job系统如何处理安全性检查和依赖关系:

为了确保隔离性,每个job都有自己的私有数据,主线程和其他job无法访问这些数据。

然而,job也可能需要与彼此或主线程共享数据。 共享相同数据的job不应并发执行,因为这会导致竞态条件。因此,当你调度可能互相冲突的job时,job系统的“安全检查”会抛出错误。

在调度job时,你可以声明它依赖于之前调度的job。 job线程在执行某个job前会保证它依赖的所有的job都执行完成,这样你就可以安全地调度本来可能会冲突的job。例如,如果jobA和jobB都访问相同的数组,你可以让jobB依赖于jobA。 这确保jobB不会在jobA完成之前执行,从而避免任何可能的冲突。

完成一个job时,代表已经完成了它直接或间接依赖的所有job。

许多Unity功能内部都在使用job系统,因此在Profiler中,你会看到不仅仅是你自己调度的job在job线程上运行。

注意,job仅用于处理内存中的数据,而不是执行I/O(输入输出)操作,例如读取和写入文件或通过网络连接发送和接收数据。因为一些I/O操作可能会阻塞调用线程,在job中执行它们会违背最大化CPU核心利用率的目标。如果你想做多线程的I/O job,你应该从主线程调用异步API或使用传统的C#多线程。

相关文章:

Unity Dots理论学习-2.ECS有关的模块(1)

Unity的实体组件系统(ECS)是支撑DOTS模块和技术的面向数据架构。ECS为Unity中的内存数据和runtime进程调度提供了高度的控制和确定性。 ECS for Unity 2022 LTS 配备了两个兼容的物理引擎,一个高级的Netcode package,以及一个用来…...

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…...

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接&#xff1a;Docker Desktop release notes | Do…...

optuna和 lightgbm

文章目录 optuna使用1.导入相关包2.定义模型可选参数3.定义训练代码和评估代码4.定义目标函数5.运行程序6.可视化7.超参数的重要性8.查看相关信息9.可视化的一个完整示例10.lightgbm实验 optuna使用 1.导入相关包 import torch import torch.nn as nn import torch.nn.functi…...

Android 设置铃声和闹钟

Android设置铃声和闹钟使用的方法是一样的&#xff0c;但是要区别的去获取对应的权限。 统一权限&#xff0c;不管是设置闹钟还是铃声&#xff0c;他们都需要一个系统设置权限如下: //高版本需要WRITE_SETTINGS权限//此权限是敏感权限&#xff0c;无法动态申请&#xff0c;需要…...

自动化测试模型(一)

8.8.1 自动化测试模型概述 在自动化测试运用于测试工作的过程中&#xff0c;测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象&#xff0c;总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。 线性测试 首先&#…...

解决nuxt3下载慢下载报错问题

在下载nuxt3时总是下不下来&#xff0c;最后还报错了。即使改成国内镜像源也不行。 解决方法&#xff1a; 直接去github上下载 https://github.com/nuxt/starter/tree/v3 解压后得到如下目录&#xff1a; 手动修改项目名和文件夹名 安装依赖 npm install可能会比较慢或下不…...

Ubuntu修改swap大小

查看swap位置和大小&#xff1a; swapon -s 方案一&#xff1a;修改原有文件大小方式 第一步&#xff1a;进入系统根目录cd /; 第二步&#xff1a;执行&#xff1a;sudo dd if/dev/zero of/swap bs1M count16384 //每段块1M 共16384块&#xff0c;即16G 第三步&#xff1a;执行…...

[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)

文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步&#xff1a;计算 (a*c) (-b*d)i2.1.4 第2步&#xff1a;计算 (a*d) (b*c)i2.1.5 第3步&#xff1a;计算结果合并 2.2 算法实现&#xff08;UseVectors&#xff09;2.…...

C#WPF基础介绍/第一个WPF程序

什么是WPF WPF&#xff08;Windows Presentation Foundation&#xff09;是微软公司推出的一种用于创建窗口应用程序的界面框架。它是.NET Framework的一部分&#xff0c;提供了一套先进的用户界面设计工具和功能&#xff0c;可以实现丰富的图形、动画和多媒体效果。 WPF 使用…...

强大的接口测试可视化工具:Postman Flows

Postman Flows是一种接口测试可视化工具&#xff0c;可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API&#xff0c;数据可视化来显示…...

系统设计及解决方案

发送验证码 1&#xff1a;根据手机号从Redis中获取value(验证码_时间戳) 2&#xff1a;如果value不为空&#xff0c;并且时间戳与当前时间戳的间隔小于60秒&#xff0c;则返回一个错误信息 3&#xff1a;生成随机验证码 4&#xff1a;调用阿里云短信服务API给用户发送短信验证码…...

从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】

1. 常用资料以及官方网站 无人机飞控PX4用户使用手册&#xff08;无人机基本设置、地面站使用教程、软硬件搭建等&#xff09;&#xff1a;https://docs.px4.io/main/en/ PX4固件开源地址&#xff1a;https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…...

Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验

一&#xff0c;alpha的LED灯硬件原理分析 STM32 IO初始化流程 ①&#xff0c;使能GPIO时钟 ②&#xff0c;设置IO复用&#xff0c;复用为GPIO ③&#xff0c;配置GPIO的电气属性推挽&#xff0c;上拉下拉 ④&#xff0c;使用GPIO&#xff0c;输出高/低电平 MX6ULL IO初始化…...

e3 1220lv3 cpu-z分数

e3 1220lv3 双核四线程&#xff0c;1.1G频率&#xff0c;最低可在800MHZ运行&#xff0c;TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。...

HTML5适配手机

要使 HTML5 网站适配手机设备&#xff0c;您可以遵循以下几个步骤和最佳实践&#xff1a; 1. 使用视口&#xff08;Viewport&#xff09; 在 HTML 文档的 <head> 部分添加视口元标签&#xff0c;以确保页面在移动设备上正确缩放和显示&#xff1a; <meta name"…...

C# 中使用 MassTransit

在生产环境中使用 MassTransit 时&#xff0c;通常需要进行详细的配置&#xff0c;包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例&#xff0c;展示了如何在 ASP.NET Core 应用程序中配置 MassTransit&#xff0c;包括请求/响应模式和…...

网络编程 实现联网 b+Tree

网络编程是客户端和服务器之间通信的基础&#xff0c;也是现代应用开发中不可或缺的技能。在 Unity 中实现网络功能&#xff0c;需要结合计算机网络原理、数据结构与算法&#xff0c;以及网络协议的实际应用。以下是对这一块内容的详细介绍&#xff0c;包括每个涉及到的知识点&…...

zentao ubuntu上安装

#下载ZenTaoPMS-21.2-zbox_amd64.tar.gz&#xff08;https://www.zentao.net/downloads.html&#xff09; https://dl.zentao.net/zentao/21.2/ZenTaoPMS-21.2-zbox_amd64.tar.gzcd /opt tar -zxvf ZenTaoPMS-21.2-zbox_amd64.tar.gz#启动 /opt/zbox/zbox start /opt/zbox/zbox…...

Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON

这里是Themberfue 在学习完简单的网络编程后&#xff0c;我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时&#xff0c;我们通过一个线程处理连接的申请&#xff0c;随后通过多线程或者线程…...

从synchronized到CompletableFuture:Java多线程完全进阶指南

在当今多核处理器普及的计算时代&#xff0c;充分利用硬件资源成为提升程序性能的关键。Java作为企业级应用的主流语言&#xff0c;其内置的多线程支持让并发编程变得触手可及。然而&#xff0c;多线程编程如同一把双刃剑——用得好&#xff0c;能成倍提升系统吞吐量&#xff1…...

Pikachu靶场实战:File Inclusion漏洞利用与防御全解析

1. File Inclusion漏洞初探&#xff1a;从理论到靶场实战 文件包含&#xff08;File Inclusion&#xff09;漏洞是Web安全领域最常见的漏洞类型之一&#xff0c;它允许攻击者通过参数控制加载服务器上的任意文件。想象一下&#xff0c;你家的门锁如果设计不当&#xff0c;小偷只…...

SinricPro Business SDK:面向量产的ESP32物联网固件开发套件

1. SinricPro Business SDK 概述SinricPro Business SDK 是专为商业化物联网产品设计的嵌入式软件开发套件&#xff0c;其核心定位并非面向 hobbyist 的快速演示工具&#xff0c;而是面向量产级硬件产品的固件基础设施。与社区版 SinricPro SDK 不同&#xff0c;Business SDK 在…...

Phi-3-Mini-128K高性能推理优化:深入理解WSL2下的GPU资源调配

Phi-3-Mini-128K高性能推理优化&#xff1a;深入理解WSL2下的GPU资源调配 1. 引言 如果你是一位在Windows上搞AI开发的伙伴&#xff0c;可能早就受够了原生环境里那些烦人的依赖冲突和性能瓶颈。我也是这么过来的&#xff0c;直到开始用WSL2&#xff0c;感觉像是打开了新世界…...

如何通过Crowbar实现游戏模组开发全流程效率提升

如何通过Crowbar实现游戏模组开发全流程效率提升 【免费下载链接】Crowbar Crowbar - GoldSource and Source Engine Modding Tool 项目地址: https://gitcode.com/gh_mirrors/crow/Crowbar 在游戏开发领域&#xff0c;技术门槛常成为创意落地的阻碍。Crowbar作为针对Go…...

AI 将编写 90% 的代码……我们现在到底该怎么办?

我至今仍清晰地记得读到那个标题的瞬间。那是 2026 年初一个平凡的夜晚&#xff0c;大约晚上 9 点&#xff0c;我正习惯性地在关闭笔记本电脑前翻阅科技新闻。突然&#xff0c;一行文字让我如坠冰窖&#xff0c;整个人僵在原地。“Anthropic 首席执行官预判&#xff1a;未来六个…...

从LAS文件到点云地图:手把手教你用LIO-SAM处理武大WHU-TLS隧道数据集

从LAS文件到点云地图&#xff1a;LIO-SAM处理WHU-TLS隧道数据集的实战指南 隧道场景的点云数据处理一直是SLAM领域的技术难点。武汉大学发布的WHU-TLS Tunnel数据集作为全球最大的地面激光扫描基准数据集之一&#xff0c;其隧道环境数据具有典型的封闭空间特征——长条形结构、…...

【黑客必看】2025最新kali Linux安装教程(超详细),看这一篇就够了

【黑客必看】2025最新kali Linux安装教程&#xff08;超详细&#xff09;&#xff0c;看这一篇就够了 【黑客必看】kali Linux安装教程&#xff08;超详细&#xff09;&#xff0c;看这一篇就够了&#xff01; 一、镜像下载 官网镜像链接&#xff1a;https://cdimage.kali.org/…...

打造高效离线文字识别系统:Umi-OCR插件深度应用指南

打造高效离线文字识别系统&#xff1a;Umi-OCR插件深度应用指南 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins 在数字化办公与信息处理领域&#xff0c;离线OCR技术正成为保护数据隐私与提升处理效率的…...

阿里云RocketMQ LiteTopic:破解高并发智能语音交互消息链路难题

【导语&#xff1a;随着AI Agent从文本交互走向语音交互&#xff0c;高并发场景下消息链路瓶颈凸显。阿里云基于RocketMQ LiteTopic构建实时语音消息链路架构&#xff0c;解决传统架构难题&#xff0c;提升业务价值。】高并发语音交互的技术瓶颈当AI Agent语音交互进入高并发场…...