0

所以我建立了一個具有物理引擎和顯示的小應用程序。顯示器連接到處理物理引擎的控制器(實際上,它是處理控制器的視圖模型,但詳細信息)。僞實時線程

當前控制器是一個委託,通過開始調用和取消令牌取消激活,然後通過endinvoke獲得。在lambda刷內PropertyChanged(掛鉤到INotifyPropertyChanged),使UI保持最新。

從我所瞭解的BeginInvoke方法激活一個任務而不是另一個線程(它在我的計算機上確實激活了另一個線程,但這不是我讀過的讀物的保證,它取決於線程池的方式希望完成任務),這對我所做的所有測試都是很好的。在CancellationToken被終止之前,lambda不會完成。它有一個睡眠和一個更新(所以它是模擬實時物理引擎...這是粗糙的,但我不需要真正的實時精度,只是足以得到一個感覺)

我的問題是,這將在其他計算機上工作,還是應該切換到我啓動並取消的顯式線程?我想到的場景是在1核心處理器上,是否有可能第二項任務將大大減少處理器時間,從而使我的可接受的不準確模型變成不可接受的錯誤(即在切換之前等待毫秒而不是微秒?)。或者,他們的一些更好的方法,我沒有提出?

+0

這是.NET嗎?如果是這樣,您可能希望將您的問題與您正在使用的編程語言一起標記。 – 2010-11-18 19:17:17

回答

1

根據我的經驗,按照您所描述的方式使用線程池將在大多數計算機上保證合理的最佳性能,而不必費力去弄清楚如何分配線程。

線程與核心不是一回事;您仍然會在單核機器上獲得多個線程,並且這些線程將分別承擔部分處理負載。你不會得到你所描述的「死鎖」情況,除非你在線程中做了一些不尋常的事情,比如讓其中一個實時優先。

也就是說,微秒在線程之間的上下文切換並不是很多時間,所以YMMV。你必須嘗試一下,看看它的工作效果如何;可能需要一些調整。