1. 程式人生 > >[UE4]UE4是單執行緒的嗎?

[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++來做這樣的事情,或者也可以使用別人包裝好的外掛來建立多執行緒。