[UE4]UE4是單線程的嗎?


並行與串行

  並行是同時在執行,串行是一個接一個地執行

進程與線程

  籠統的說,進程是游戲的一次運行,線程是進程里面分配CPU資源的最小單位

類比

  1、把世界看成一台計算機

  2、世界里面的人可以看成是一個一個的進程

  3、一個人可以分心做很多事情:一邊走路一邊看手機、一邊吃飯一邊看電視、一邊聽歌一邊學習

  4、進程跟人一樣,生命只有一次

大部分游戲,都是單線程的

  為什么會這樣呢?

  一方面,單線程寫起來比較容易理解;另一方面,它比較符合計算機最開始的架構,最開始的CPU都是單線程的,一條指令一條指令執行。

單線程程序只能利用多核CPU中的一個核

  

單線程改成多線程的阻力

  1、應用場景不一定適合:瓶頸不在CPU,而是在其他(比如顯卡)

  2、多線程程序對開發人員要求比較高:能正確處理數據之間的依賴關系

  3、多線程本身是有額外開銷的。

UE4線程

  1、游戲主循環是單線程的,不會有多個線程來執行主循環(接受輸入、處理游戲邏輯、渲染、Sleep),因此不在一幀里面做太多的事情,如果要做的事情太多的話,可以拆分成在多幀里面運行,就不會卡住了。

  2、設計思想上,模擬了並行(不會有真正的“同時”),游戲引擎模擬的是現實世界,現實世界是並行的,游戲引擎為了讓人容易理解,因此游戲引擎模擬了並行,采用的辦法就是每個Actor都有自己的Beginplay和tick事件。在游戲主循環的“處理游戲邏輯”里面,對每個Actor的Tick事件都調用一遍,這一個看起來所有的Actor看起來都是並行的。

  Tick事件是每幀都被調用一次,在60幀率游戲中,每一幀只需要17毫秒,在17毫秒要處理所有actor的Tick事件,一幀所花費的時間太短,在玩家看來就是同時執行的。但實際上並沒有真正的同時調用Tick事件。

  假設你有一種超能力,啪一下就能讓整個世界的時間靜止,這個時候去觀察正在運行的游戲,它可能正在停止某一幀上,可能正在處理某個Actor的Tick事件,請注意,這個時候只有一個Actor的Tick事件是被處理的,不會同時有2個的Actor的Tick事件被執行。

  所以說游戲引擎只是模擬了並行,但實際上不是真正的並行。

  3、編譯、構建光照、運行時與顯卡的交互,可能是多線程的,這個是游戲引擎自身的優化,跟游戲邏輯本身的開發是沒有關系的。

  4、用戶可以自己創建多線程,不過UE4藍圖並且提供這樣的接口,但可以使用C++來做這樣的事情,或者也可以使用別人包裝好的插件來創建多線程。

 


免責聲明!

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



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