1.如果同時你要處理很多事情或者與Unity的對象互動小可以用thread,否則使用coroutine.
2.Unity編程時,總有個主線程執行你的代碼,也可以創建額外的線程和主線程同時運行,而Unity中你僅能從主線程中訪問Unity的組件,對象和Unity系統調用,任何企圖訪問這些項目的第二個線程都將失敗並引發錯誤,這是一個要重視的限制,要確保一次只有一個線程來修改變量。
3.而提到多線程就要提到 Unity 非常常用的協程,然而協程並非真正的多線程。協程其實是等某個操作完成之后再執行后面的代碼,或者說是控制代碼在特定的時機執行。而多線程在 Unity 渲染和復雜邏輯運算時可以高效的使用多核 CPU,幫助程序可以更高效的運行。通常可以將需要大量計算的算法內容,放置到多線程中執行,包括邏輯框架也可以放到多線程中執行。
4.適用於:
(1) 大量耗時的數據計算
(2) 網絡請求
(3) 復雜密集的I/O操作
注意:
(2) 網絡請求
(3) 復雜密集的I/O操作
- 變量都是共享的(都能指向相同的內存地址)
- UnityEngine 的 API 不能在分線程運行
- UnityEngine 定義的基本結構(int, float, struct 定義的數據類型)可以在分線程計算,如 Vector3(struct)可以, 但 Texture2d(class,根父類為 Object) 不可以。
- UnityEngine 定義的基本類型的函數可以在分線程運行
時間切片的核心思想是:如果任務不能在50毫秒內執行完,那么為了不阻塞主線程,這個任務應該
讓出主線程的控制權,使瀏覽器可以處理其他任務。讓出控制權意味着停止執行當前任務,讓瀏覽器去執行其他任務,隨后再回來繼續執行沒有執行完的任務。
所以時間切片的目的是不阻塞主線程,而實現目的的技術手段是將一個長任務拆分成很多個不超過50ms的小任務分散在宏任務隊列中執行。