嗚嗚喔學習筆記: Unity 多執行緒效能分析 (Thread , Task , BackgroundWorker , Corotine )

搜尋此網誌

2019年8月19日 星期一

Unity 多執行緒效能分析 (Thread , Task , BackgroundWorker , Corotine )

Unity API 只能在 MainThread 處理 , 但是其他如 IO, 或是純計算可以用多執行緒加速。
*要注意 Mutil Thread 處理完還要回 MainThread * 才能使用Unity API

測試環境 Unity 2017 x BlueStack 4

Unity 非同步做法有
1. Task (Mutil Thread)
2. Thread (Mutil Thread)
3. Corotine ( Main Thread ) (Single Thread)
4. BackgroundWorker (Mutil Thread)
     - BackgroundWoker 自帶回 MainThread 的API 可說是相當方便。

其中 Task , Thread , BackgroundWorker 都是.Net 提供的多執行緒做法只是根據.Net版本做更新

 ( 版本由舊到新 )
Thread < BackgroundWoker < Task(.Net 4.5+)
PS: Unity 2017 (.Net 3.5 版本 不能使用 Task 需切換為 .Net 4.5+ )

這裡使用LZMA 解壓做測試 :


時間平均FPS最大FPS最小FPS中位數FPS
(blueStack)(解壓+存檔)x10 [155 KB Assetbundle ] 效能統計
Muitil Thread230ms41603639
Mutil BackgourdWorker155ms55595056
BackgroundWorker OnebyOne409ms59615460
Corotine OnebyOne340ms43583841
Task OnebyOne445ms57595558
Mutil Task183ms56605058
1 Mutil Thread331ms59605960


結論 : 只用Corotine 跑最慢且會影響 FPS (如預期 因為他只在MainThread 執行) 
 BackgroundWorker & Task 效能差不多 , 單純用 Thread 稍差一點。

未來: Unity 2018 還有提供 JobSystem 的執行緒封裝,之後可以再來試試看~

沒有留言:

張貼留言