Unity C# Job System介绍(一) Job System总览和多线程

C# Job System 总览

Unity的C# Job System使用户可以编写与Unity其他部件交互的多线程代码,同时让编写正确的代码变得更容易。

编写多线程代码可以提供更好的性能表现。这包括非常明显的帧数提升。C# job协同Burst编译器可以提升代码生成的质量,这也会使得移动设备电量消耗大幅度降低。

C# Job System的一个非常关键的方面是它可以融入Unity内部的原生Job System。这使得用户的代码可以和Unity共享worker threads。这种合作避免了创建更多线程,因为这可能会造成对于CPU资源的争抢。

关于更多的信息,可以观看演讲Unity at GDC - Job System & Entity Component System

什么是多线程?

    What is multithreading?​docs.unity3d.com

在一个单线程的计算系统中,当输入指令的时候,结果会在同时计算产生。加载和运行程序的时间取决于你需要CPU处理的工作的数量。What is multithreading?在一个单线程的计算系统中,当输入指令的时候,结果会在同时计算产生。加载和运行程序的时间取决于你需要CPU处理的工作的数量。

多线程是一种编程技术,充分利用CPU的多个核心可以在同一时间处理多个不同线程的能力。任务或者指令会在同一时间执行,而不是一个接一个执行。

有一个线程会在程序开始的时候默认运行,被称为“主线程”。主线程创建新的线程来处理任务。这些新的线程会并发地执行,并在任务完成时向主线程同步自己的结果。

这种多线程的方法在你有几个需要较长时间运行的任务时表现良好。但是,游戏代码中通常包含很多需要同时执行的短指令。如果你为每一个指令都创建一个进程,你会因为拥有太多短生命周期的线程而失败。这会加剧CPU和操作系统处理能力的紧张。

线程生命周期的问题可能可以通过线程池的方式来解决。但是,即使你使用了线程池,你依然可能在同一时间拥有大量的活跃线程。CPU上运行更多的线程会导致彼此争抢CPU上的资源,这将会导致频繁的上下文切换(Context switching)。上下文切换是将正在执行的线程状态保存下来,然后执行另一个线程,随后再恢复到第一个线程并继续执行的过程。上下文切换会大量占用资源,所以需要尽可能避免需要用到它。

什么是Job System?

一个job system通过创建jobs而不是线程来管理多线程的代码。

一个job system管理运行在多个核心上的一组工人线程(worker threads)。通常一个逻辑CPU核心上会有一个工人线程,从而避免上下文切换(虽然可能会为操作系统或其他专有程序保留一些核心)。

一个job system会把jobs放到一个job队列中去执行。job system中的工人线程从job队列中取出内容并执行他们。一个job system会管理依赖性并确保jobs以正确的顺序被执行。

什么是一个Job?

一个job是小单位的工作,通常包含一个特定的任务。一个job接受参数并根据数据进行操作,接近于一个方法的工作方式。job可以是独立的,或者他们可以依赖于其他jobs完成后再执行。

什么是Job的关联性?

在复杂的系统中,像是游戏开发需要的系统,不太可能每一个job都是独立的。一个job通常会准备下一个job所需要的数据。jobs了解并支持这种依赖来确保可以正常工作。如果jobA依赖于jobB,那么job system会确保jobB执行完毕后才开始执行jobA。

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

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

相关文章

Unity C# Job System介绍(二) 安全性系统和NativeContainer

C# Job System中的安全性系统 https://docs.unity3d.com/Manual/JobSystemSafetySystem.html​docs.unity3d.com 资源竞争 当我们编写多线程代码时,经常会有产生资源竞争的风险。资源竞争会在一项操作的输出依赖于另一项它掌控之外的操作时发生。 资源竞争并不总…

Unity C# Job System介绍(三) Job的创建和调度

创建Jobs Unity - Manual: Creating jobs​docs.unity3d.com 为了在Unity中创建一个job你需要实现IJOb接口。IJob允许你调度一个job,和其他jobs并发执行。Unity - Manual: Creating jobs为了在Unity中创建一个job你需要实现IJOb接口。IJob允许你调度一个job&#…

Unity C# Job System介绍(四) 并行化Job和故障排除(完结)

并行化job ParallelFor jobs​docs.unity3d.com 当调度Jobs时,只能有一个job来进行一项任务。在游戏中,非常常见的情况是在一个庞大数量的对象上执行一个相同的操作。这里有一个独立的job类型叫做IJobParallelFor来处理此类问题。ParallelFor jobs当调…

C# Job System

概述 设计目的:简单安全地使用多线程,随便就能写出高性能代码 收益:FPS更高,电池消耗更低(Burst编译器) 并行性:C# Job System和Unity Native Job System共享工作线程worker threads&#xf…

Unity游戏开发——C#特性Attribute与自动化

这篇文章主要讲一下C#里面Attribute的使用方法及其可能的应用场景。 比如你把玩家的血量、攻击、防御等属性写到枚举里面。然后界面可能有很多地方要根据这个枚举获取属性的描述文本。 比如你做网络框架的时候,一个协议号对应一个类的处理或者一个方法。 比如你做…

Unity c#中Attribute用法详解

举两个例子,在变量上使用[SerializeFiled]属性,可以强制让变量进行序列化,可以在Unity的Editor上进行赋值。 在Class上使用[RequireComponent]属性,就会在Class的GameObject上自动追加所需的Component。 以下是Unity官网文档中找…

attribute的用法--C#

一直以来都没理解attribute是个什么东西,也没怎么用,但是看msdn或者git上源码使用的还是蛮频繁的,今天好好整理了下,写下自己的理解和例子: attribute主要用来说明代码段的的信息,标志等;可以一…

走进LWRP(Universal RP)的世界

走进LWRP(Universal RP)的世界 原文:https://connect.unity.com/p/zou-jin-lwrp-universal-rp-de-shi-jie LWRP自Unity2018发布以来,进入大家视野已经有一段时间了,不过对于广大Unity开发者来说,依然相对…

Unity Fine Prued Tiled Light (FPTL)

Fine Prued Tiled Light Lists 视频讲解:https://www.bilibili.com/video/av90517615 FPT是在Tile裁剪的基础上在进行一次剔除 可用于Forward Render和Deferred Shading两种渲染管线 利用了并行架构进行优化 将线程分为线程组再分为多个线程,Thread Gro…

Unity 2017 Game Optimization 读书笔记(1)Scripting Strategies Part 1

1.Obtain Components using the fastest method Unity有多种Getcomponet的方法&#xff1a; GetComponent(string), GetComponent<T>() GetComponent(typeof(T)) 哪种效率最高会跟随Unity版本的变化而变化&#xff0c;对于Unity 2017&#xff0c;本书作者的测试是Ge…

C# 多态相关的文章

一 C# 多态的实现 封装、继承、多态&#xff0c;面向对象的三大特性&#xff0c;前两项理解相对容易&#xff0c;但要理解多态&#xff0c;特别是深入的了解&#xff0c;对于初学者而言可能就会有一定困难了。我一直认为学习OO的最好方法就是结合实践&#xff0c;封装、继承在…

C++ 虚函数和虚表

几篇写的不错的文章&#xff0c;本文是整合了这几篇文章&#xff0c;感谢这些大佬 https://www.jianshu.com/p/00dc0d939119 https://www.cnblogs.com/hushpa/p/5707475.html https://www.jianshu.com/p/91227e99dfd7 多态: 多态是面相对象语言一个重要的特性,多态即让同一…

Unity 2017 Game Optimization 读书笔记(2)Scripting Strategies Part 2

1. Share calculation output 和上一个Tip很像&#xff0c;可以缓存计算结果或者各种信息&#xff0c;避免多次重复的计算&#xff0c;例如在场景里查找一个物体&#xff0c;从文件读取数据&#xff0c;解析Json等等。 容易忽略的点是常常在基类了实现了某个方法&#xff0c;在…

Unity 2017 Game Optimization 读书笔记(3)Scripting Strategies Part 3

1.Avoid retrieving string properties from GameObjects 通常来讲&#xff0c;从C#的object中获取string 属性没有额外的内存开销&#xff0c;但是从Unity中的Gameobject获取string属性不一样&#xff0c;这会产生上一篇讲到的 Native-Managed Bridge&#xff08;Native内存和…

Unity 2017 Game Optimization 读书笔记(4)Scripting Strategies Part 4

1.Avoid Find() and SendMessage() at runtime SendMessage() 方法和 GameObject.Find() 相关的一系列方法都是开销非常大的。SendMessage()函数调用的耗时大约是一个普通函数调用的2000倍&#xff0c;GameObject.Find() 则和场景的复杂度相关&#xff0c;场景越复杂&#xff0…

团队行为心理学读书笔记(1)

阿伯拉罕马斯洛需求五个层次&#xff1a; &#xff08;1&#xff09;生理需要&#xff1a;食物、水、住所、性满足等方面的需要。 &#xff08;2&#xff09;安全需要&#xff1a;保护自己免受身体和情感伤害的需要。 &#xff08;3&#xff09;爱和归属的需要&#xff1a;渴…

团队行为心理学读书笔记(2)招聘背后的心理学

招聘时&#xff0c;不要只看应聘者的知识和技能 美国著名心理学家麦克利兰1973年提出了一个著名的素质冰山模型。所谓“冰山模型”&#xff0c;就是将人员个体素质的不同表现形式划分为表面的“冰山以上部分”和深藏的“冰山以下部分”。其中&#xff0c;冰山以上部分包括基本…

团队行为心理学读书笔记(3)领导力背后的行为心理学

有小缺点的主管&#xff0c;在下属眼里更有魅力 一位心理学教授曾做了一个关于管理者魅力的实验&#xff0c;他给被测试的对象播放了四段情节类似的访谈录像&#xff1a;出现在第一段录像里的是一个非常优秀的成功人士&#xff0c;他成就辉煌&#xff0c;面对主持人的采访&…

团队行为心理学读书笔记(4)带队伍背后的行为心理学

成就高效团队的基础&#xff1a;信任 信任具有三个特征&#xff1a;第一&#xff0c;信任者承担着一定的风险&#xff0c;信任者要承受被信任者失信的损失&#xff1b;第二&#xff0c;被信任者的行为不在信任者的控制之内&#xff1b;第三&#xff0c;如果某一方违约&#xf…

Unity HDRP中的光照烘焙测试(Mixed Lighing )和间接光

部分内容摘抄自&#xff1a;https://www.cnblogs.com/murongxiaopifu/p/8553367.html 直接光和间接光 大家都知道在Unity中&#xff0c;我们可以在场景中布置方向光、点光、聚光等类型的光源。但如果只有这些光&#xff0c;则场景内只会受到直接光的影响&#xff0c;而所谓的…