2011-08-23 65 views
4

在我的遊戲中,用戶可以加載自定義腳本。 通常會加載50-100個腳本。 每個腳本都通過其Update方法調用每個框架。我應該在自己的線程中運行每個插件嗎?

  1. 當腳本崩潰時,其他腳本不應受到影響。
  2. 腳本更新方法允許每幀最多運行1毫秒。所以我也需要能夠中止腳本凍結/不及時反應。

我該怎麼做?我認爲每秒啓動3000 - 6000個線程並不是這裏的最佳做法。 我也無法啓動線程,只要調用Update循環並等待16ms,因爲腳本需要與遊戲同步。腳本依賴於每幀運行。

線程池是否是正確的選擇?如果是這樣,我該如何放棄超時的腳本?

回答

4

簡而言之:保護敵方惡意代碼很難。

1.當腳本崩潰時,其他腳本不應受到影響:要實現此目的,Windows中唯一可靠的方法是在單獨的進程中運行每個腳本。即由「腳本」引起的StackOverflow異常會導致您的流程失效。跨進程溝通不太可能輕鬆滿足您的性能要求。

2.每個腳本1毫秒:中止線程是一種解決方案。避免大量的線程(超過數十個線程是值得懷疑的:線程之間的切換可能會導致性能下降,堆棧空間吃掉所有內存,並且在一般情況下,同步狀態交叉線程很有趣)。考慮不要重新啓動表現不佳的「腳本」 - 這樣您就不必擔心太多的Thread.Abort調用。請注意,殺死不需要的線程會殺死與「腳本」相關的所有內容,因爲它可能催生了自己的線程/異步操作/線程池任務...

相關問題