Unity C# Job System介绍(一)

翻译自官方文档,原文地址 https://docs.unity3d.com/Manual/JobSystemOverview.html

C# Job System 总览

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

编写多线程代码可以提供更好的性能表现。这包括极大的提升提升和手机上更久的续航。

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

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

什么是多线程?

原文地址 https://docs.unity3d.com/Manual/JobSystemMultithreading.html

在一个单线程的计算系统中,当输入指令的时候,结果会在同时计算产生。加载和运行程序的时间取决于你需要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。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值