2013-11-22 110 views
2

我正在嘗試爲遊戲引擎創建一個線程池,我一直在考慮我的系統應該如何對第三方庫產生自己的線程做出反應。等待的線程是否會吃掉CPU時間?

從我讀過的內容來看,理想的情況是每個你有權訪問的CPU只有一個線程。因此,如果我的第三方物理更新產生四個線程,那麼在運行時關閉線程池中的四個線程,然後再打開它們是理想的,這樣多個線程永遠不會爭奪一個CPU。

我的問題是關於像條件變量的功能背後的基本機制。由於產卵線程很昂貴,因此有四個線程等待一個條件變量,然後在物理完成時通知他們,這似乎比連接四個線程並在之後重新產生它們更好。但是如果他們在等待一個變量,這些線程是否真的「睡着了」,還是在後臺爭奪CPU資源?

+0

你在編程什麼語言? –

回答

1

儘管您沒有編寫要編程的平臺,但在大多數實現中,等待中的線程幾乎不佔用CPU資源。

但是它們會使用一些內存(以保存堆棧等),所以您應該避免產生過多的線程並儘可能地重用它們,因爲正如您所指出的那樣,產生一個新線程是在大多數平臺上的昂貴操作。

即使您沒有提供很多信息,我猜測在您的方案中讓線程等待是一個更好的選擇,因爲少量線程不會使用大量資源,並且可能必須頻繁產生新線程幾乎會在所有平臺上嚴重影響性能。