浅析Unity的C# Job System

一、 C# Job System
多线程使程序更高效,但是想要实现多线程需同时避免频繁的上下文切换、线程的资源的竞争

What is a job system?
通过创建一个Jobs代替线程来管理多线程代码
将jobs 放入job queue中执行,job system中的工作线程从job queue中提取并执行它们
job system管理依赖项并确保jobs以适当的顺序执行。

What is a job?
job是完成一项特定任务的小工作单位。job接收参数并对数据进行操作,类似于方法调用的行为。job可以是独立的,也可以在运行之前依赖于其他jobs来完成。

What are job dependencies?
在复杂的系统中,比如游戏开发所需要的系统,不太可能每个工作都是独立的。一个job通常是为下一份job准备数据。job意识到并支持依赖关系使其工作。如果jobA依赖于jobB,作业系统将确保jobA在jobB完成之前不会开始执行。

Race Condition
在编写多线程代码时,总是存在竞争条件的风险。当一个操作的输出依赖于其控制之外的另一个进程的时间时,就会出现竞态条件。
竞态条件并不总是错误,但它是不确定行为的来源。当竞态条件确实导致bug时,可能很难找到问题的根源,因为这取决于时间,所以只能在很少的情况下重新创建问题。调试它会导致问题消失,因为断点和日志记录会改变单个线程的时间。竞态条件在编写多线程代码时产生了最大的挑战。

Safety system
为了更容易编写多线程代码,Unity c# Job system检测所有潜在的竞态条件,并保护您不受它们可能导致的bug的影响。
例如:如果c# Job system将数据的引用从主线程中的代码发送到Job,它无法验证主线程是否在Job写入数据的同时读取数据。这个情况就创建了一个竞态条件。
c# Job system通过向每个作业发送它需要操作的数据的副本来解决这个问题,而不是向主线程中的数据发送引用。此副本隔离数据,从而消除竞态条件。
c# Job system复制数据的方式意味着Job只能访问可交换数据类型。当在托管代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值