原因
大多數(shù)游戲引擎是主循環(huán)結(jié)構(gòu), 邏輯更新和畫(huà)面更新的時(shí)間點(diǎn)要求有確定性, 如果在邏輯更新和畫(huà)面更新中引入多線(xiàn)程, 就需要做同步而這加大了游戲的開(kāi)發(fā)難度, 尤其是對(duì)編程關(guān)卡的程序猿而言. 所以需要異步功能的時(shí)候, 游戲引擎總是傾向于使用 Time-Slicing 的策略而不是使用多線(xiàn)程, Unity 中的協(xié)程 (coroutine) yield 語(yǔ)法的本質(zhì)就是 Time-Slicing.
Unity 的函數(shù)執(zhí)行機(jī)制是幀序列調(diào)用沟使,甚至連 Unity 的協(xié)程 Coroutine 的執(zhí)行機(jī)制都是確定的,如果可以使用多線(xiàn)程訪(fǎng)問(wèn) UnityEngine 的對(duì)象和 api 就得考慮同步問(wèn)題了,也就是說(shuō) Unity 其實(shí)根本沒(méi)有多線(xiàn)程的機(jī)制,協(xié)程只是達(dá)到一個(gè)延時(shí)或者是當(dāng)指定條件滿(mǎn)足是才繼續(xù)執(zhí)行的機(jī)制圾浅。
Unity 引擎的類(lèi)都不是線(xiàn)程安全的(Mathf 不是類(lèi));Unity 沒(méi)有自帶的多線(xiàn)程解決方案,協(xié)程是假的多線(xiàn)程,本質(zhì)還是單線(xiàn)程渤昌;
什么時(shí)候使用線(xiàn)程?
1.處理復(fù)雜邏輯走搁,渲染 等需要大量計(jì)算的算法內(nèi)容
2.下載較大數(shù)據(jù)独柑,網(wǎng)絡(luò)傳輸?shù)?/p>