在知乎上看到過這段話php
可是 Unity 爲何通常避免使用多線程, 實際上大多數遊戲引擎也都是單線程的, 由於大多數遊戲引擎是主循環結構, 邏輯更新和畫面更新的時間點要求有肯定性, 若是在邏輯更新和畫面更新中引入多線程, 就須要作同步而這加大了遊戲的開發難度, 尤爲是對編程關卡的程序猿而言. 因此須要異步功能的時候, 遊戲引擎老是傾向於使用 Time-Slicing 的策略而不是使用多線程, Unity 中的協程 (coroutine) yield 語法的本質就是 Time-Slicing.html
Unity 的函數執行機制是幀序列調用,甚至連 Unity 的協程 Coroutine 的執行機制都是肯定的,若是能夠使用多線程訪問 UnityEngine 的對象和 api 就得考慮同步問題了,也就是說 Unity 其實根本沒有多線程的機制,協程只是達到一個延時或者是當指定條件知足是才繼續執行的機制。算法
Unity 引擎的類都不是線程安全的(Mathf 不是類);Unity 沒有自帶的多線程解決方案,協程是假的多線程,本質仍是單線程;編程
可是多線程也是有好處的, 若是不是畫面更新, 也不是常規的邏輯更新 (指包括 AI | 物理碰撞 | 角色控制這些), 而是一些其餘後臺, 好比網絡傳輸, 則能夠將這個獨立出來作成一個工做線程, 這須要寫 Unity 遊戲的 Native 擴展.api
也就是說 Unity 開發過程當中有使用多線程的時候, Unity 能夠使用多線程,但對其有不少限制,也就是 在不使用 UnityEngine API 的狀況下,能夠使用多線程,提升多核 CPU 的使用率。而提到多線程就要提到 Unity 很是經常使用的協程,然而協程並不是真正的多線程。協程實際上是等某個操做完成以後再執行後面的代碼,或者說是控制代碼在特定的時機執行。而多線程在 Unity 渲染和複雜邏輯運算時能夠高效的使用多核 CPU,幫助程序能夠更高效的運行。一般能夠將須要大量計算的算法內容,放置到多線程中執行,包括邏輯框架也能夠放到多線程中執行。安全
Unity 使用多線程注意網絡
1. 變量都是共享的(都能指向相同的內存地址) 2. UnityEngine 的 API 不能在分線程運行 3. UnityEngine 定義的基本結構(int, float, struct 定義的數據類型)能夠在分線程計算,如 Vector3(struct)能夠, 但 Texture2d(class,根父類爲 Object) 不能夠。 4. UnityEngine 定義的基本類型的函數能夠在分線程運行
https://zhidao.baidu.com/question/1927250192416022867.html
http://dsqiu.iteye.com/blog/2028503
http://www.phpstudy.net/b.php/91487.html多線程
End.框架