什么是Job System?
- 一个job system通过创建jobs而不是线程来管理多线程的代码。Job是一个小的工作单元,不等同线程。管理运行在多个核心上的一组工人线程(worker threads)。
- Job的处理数据是值类型,由NativeContainer管理,而NativeContainer的存在就是通过指针操作解决copy得来的数据的回传结果问题。
- 当Job之间有数据依赖,用JobHandle之间的依赖来解决。总之原则就是一份数据只能由一个Job来修改。当数据不需要修改,强烈建议标记只读,提升性能。而且可以并行读取。
Tips:
- Do not access static data from a job
- Flush scheduled batches
- Don’t try to update NativeContainer contents --没有指针概念,所以修改后要赋值回去。
- Call JobHandle.Complete to regain ownership
- Use Schedule and Complete in the main thread -- 不要尝试 schedule jobs within jobs.
- Mark NativeContainer types as read-only
- Check for data dependencies
- Do not allocate managed memory in jobs