C#作业系统中的安全系统

比赛条件

编写多线程代码时,总是存在竞争条件的风险。当一个操作的输出取决于其控制之外的另一个过程的定时时,发生竞争条件。

竞争条件并不总是一个错误,但它是不确定行为的来源。当竞争条件确实导致错误时,可能很难找到问题的根源,因为它取决于时间,因此您只能在极少数情况下重新创建问题。调试它可能会导致问题消失,因为断点和日志记录可以改变单个线程的时间。竞争条件是编写多线程代码时最重大的挑战。

阅读更多

C#作业系统提示和故障排除

使用Unity C#作业系统时,请确保遵守以下内容:

不要从作业访问静态数据

从作业访问静态数据会绕过所有安全系统。如果您访问错误的数据,您可能会以意想不到的方式崩溃Unity。例如,访问MonoBehaviour可能会导致域重新加载崩溃。

注意:由于存在这种风险,Unity的未来版本将阻止使用静态分析从作业进行全局变量访问。如果您确实访问作业中的静态数据,则应该期望您的代码在Unity的未来版本中中断。

阅读更多

JobHandle和依赖项

要当您调用作业的Schedule方法时,它将返回JobHandle。您可以在代码中使用一个JobHandle作为其他作业的依赖项。如果作业取决于另一个作业的结果,您可以将第一个作业JobHandle作为参数传递给第二个作业的Schedule方法,如下所示:

阅读更多

C# Job System 概述

C# 作业系统是如何工作

  • 允许用户编写与Unity其余部分良好交互的多线程代码,并使编写正确的代码变得更加容易。
  • 编写多线程代码可以提供高性能的好处,其中包括帧速率的显著提高、以及将Burst编译器与C#作业一起使用可以提高代码生成质量从而大大降低移动设备的电池消耗。
  • 一个重要方面是它与Unity内部使用的集成(Unity的本地作业系统)。用户编写的diamante和Unity共享工作线程,这种合作避免了创建比CPU核心更多的线程,从而降低对CPU资源的争用。
阅读更多

什么是多线程?

在单线程计算系统中,一次进入一条指令,一次出现一条结果。加载和完成程序的时间取决于CPU需要完成的工作量。

多线程是一种编程,它利用CPU在多个内核上同时处理多个线程的能力。它们不是一个接一个地执行任务或指令,而是同时运行。

阅读更多

创建作业

要在Unity中创建作业,您需要实现IJob接口。IJob允许您安排与正在运行的任何其他作业并行运行的单个作业。

注意:“作业”是Unity中用于实现IJob接口的任何结构的集合术语。

阅读更多

安排工作

要在主线程中安排作业,您必须:

  • 实例化作业。
  • 填充作业的数据。
  • 调用Schedule方法。

调用Schedule将作业放入作业队列以便在适当的时间执行。一旦安排,你就不能打断工作。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×