一、 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写入数据的同时读取数据。这个情况就创建了一个