unity多線程


1.如果同時你要處理很多事情或者與Unity的對象互動小可以用thread,否則使用coroutine.

2.Unity編程時,總有個主線程執行你的代碼,也可以創建額外的線程和主線程同時運行,而Unity中你僅能從主線程中訪問Unity的組件,對象和Unity系統調用,任何企圖訪問這些項目的第二個線程都將失敗並引發錯誤,這是一個要重視的限制,要確保一次只有一個線程來修改變量。

3.而提到多線程就要提到 Unity 非常常用的協程,然而協程並非真正的多線程。協程其實是等某個操作完成之后再執行后面的代碼,或者說是控制代碼在特定的時機執行。而多線程在 Unity 渲染和復雜邏輯運算時可以高效的使用多核 CPU,幫助程序可以更高效的運行。通常可以將需要大量計算的算法內容,放置到多線程中執行,包括邏輯框架也可以放到多線程中執行。
4.適用於:
(1) 大量耗時的數據計算
(2) 網絡請求
(3) 復雜密集的I/O操作
注意:

  • 變量都是共享的(都能指向相同的內存地址)
  • UnityEngine 的 API 不能在分線程運行
  • UnityEngine 定義的基本結構(int, float, struct 定義的數據類型)可以在分線程計算,如 Vector3(struct)可以, 但 Texture2d(class,根父類為 Object) 不可以。
  • UnityEngine 定義的基本類型的函數可以在分線程運行
5.時間切片
時間切片的核心思想是:如果任務不能在50毫秒內執行完,那么為了不阻塞主線程,這個任務應該 讓出主線程的控制權,使瀏覽器可以處理其他任務。讓出控制權意味着停止執行當前任務,讓瀏覽器去執行其他任務,隨后再回來繼續執行沒有執行完的任務。

所以時間切片的目的是不阻塞主線程,而實現目的的技術手段是將一個長任務拆分成很多個不超過50ms的小任務分散在宏任務隊列中執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM