Unity FixedUpdate 与 Update 的线程关系实验
2016-12-06 09:31
369 查看
先上结论:FixedUpdate 与 Update 在同一个线程上。
实验过程:
1、打印 FixedUpdate 和 Update 的线程编号
得到结果如下:
由此可见,FixedUpdate 和 Update 是运行在同一个线程上的。这样我们在处理 FixedUpdate 的时候,就不需要考虑和 Update 之间线程同步的问题了。
2、再来,我们把 FixedUpdate 帧率调低到 1 秒
结果同样是在一个线程上
3、我们再做个坏事,先把 FixedUpdate 的帧率调回到 0.02,然后在 FixedUpdate 的时候执行 Thread.Sleep(1000)
再执行的时候发现——Update 也同时被 FixedUpdate 阻塞了,整个 Unity 软件的 UI 都一卡一卡的……
4、再来,我们不睡 FixedUpdate 了,换成睡 Update
看看结果
线程唤醒后,Unity拼命的执行 FixedUpdate,然后再执行一次 Update。
由此可以猜想:Unity 在整个生命周期中可能建了一个托管代码执行队列,通过生命周期管理器往这个队列中添加执行方法的 delegate,然后启动一个托管线程循环的取队列中的方法(delegate)并执行。
希望这个实验对您有帮助。
实验过程:
1、打印 FixedUpdate 和 Update 的线程编号
void FixedUpdate () { Debug.Log ("FixedUpdate => " + Thread.CurrentThread.ManagedThreadId); } void Update () { Debug.Log ("Update => " + Thread.CurrentThread.ManagedThreadId); }
得到结果如下:
由此可见,FixedUpdate 和 Update 是运行在同一个线程上的。这样我们在处理 FixedUpdate 的时候,就不需要考虑和 Update 之间线程同步的问题了。
2、再来,我们把 FixedUpdate 帧率调低到 1 秒
结果同样是在一个线程上
3、我们再做个坏事,先把 FixedUpdate 的帧率调回到 0.02,然后在 FixedUpdate 的时候执行 Thread.Sleep(1000)
void FixedUpdate () { Debug.Log ("FixedUpdate => " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep(1000); } void Update () { Debug.Log ("Update => " + Thread.CurrentThread.ManagedThreadId); }
再执行的时候发现——Update 也同时被 FixedUpdate 阻塞了,整个 Unity 软件的 UI 都一卡一卡的……
4、再来,我们不睡 FixedUpdate 了,换成睡 Update
void FixedUpdate () { Debug.Log ("FixedUpdate => " + Thread.CurrentThread.ManagedThreadId); } void Update () { Debug.Log ("Update => " + Thread.CurrentThread.ManagedThreadId); Thread.Sleep (1000); }
看看结果
线程唤醒后,Unity拼命的执行 FixedUpdate,然后再执行一次 Update。
由此可以猜想:Unity 在整个生命周期中可能建了一个托管代码执行队列,通过生命周期管理器往这个队列中添加执行方法的 delegate,然后启动一个托管线程循环的取队列中的方法(delegate)并执行。
希望这个实验对您有帮助。
相关文章推荐
- Unity中Update,FixedUpdate,LateUpdate的区别
- Unity游戏暂停(Update与FixedUpdate区别)
- Unity游戏暂停之Update与FixedUpdate区别
- [Unity] 从SurvivalShooter的角色移动,看FixedUpdate与Update
- Unity 之 AfterFixedUpdate,在所有 GameObject FixedUpdate 后执行
- Unity游戏暂停(Update与FixedUpdate区别)
- unity中fixedUpdate和Update的区别
- 小译UnityAPI-Update,FixedUpdate ,LateUpdate
- Unity游戏暂停之Update与FixedUpdate区别
- Unity 中 Update中使用 Time.deltaTime 和 FixedUpdate中使用Time.fixedDeltaTime
- unity, OnTriggerStay/OnTriggerStay2D not called every fixedUpdate frame
- Unity中FixedUpdate和Update的区别
- UNITY 之FixedUpdate
- 【Unity3D自学记录】failed to update unity web player解决办法。
- UNIX程序设计实验六 线程及其同步—哲学家问题
- unity渲染层级关系小结(转载)
- 线程与进程的关系
- 进程、线程和程序之间的关系
- 进程线程及堆栈关系的总结
- Activity生命周期和其中另外线程的关系