背景
從歷史上看,我沒有寫太多的線程相關的代碼。我對這個過程很熟悉,我可以使用System.Threading
來做需要時我需要做的事情。然而,我的大部分經驗都被困在.Net 2.0世界(唉!),我需要一些幫助在最新版本的.Net中執行一項非常簡單的任務。作爲低優先級的CPU操作執行並行for循環的最簡單方法是什麼?
我需要編寫一個簡單的並行作業,但我更願意將它作爲低優先級任務執行,不會使我的PC停滯不前。
下面是一個簡單的並行示例,演示了我試圖完成的工作類型。在這個例子中,如果新值大於最後發現的最大隨機數,我將隨機數存儲起來。
請理解,這個例子的要點是嚴格證明我有一個計算,我希望重複執行,比較和存儲。我明白需要變量鎖定,我也知道這個代碼並不完美。然而,這是我需要完成的事情的一個非常簡單的例子。如果你運行這個代碼,你的CPU會停下來。
int i = 0;
ThreadSafeRNG r = new ThreadSafeRNG();
ParallelOptions.MaxDegreeOfParallelism = 4; //Assume I have 8 cores.
Parallel.For(0, Int32.MaxValue, (j, loopState) =>
{
int k = r.Next();
if (k > i) k = i;
}
如何以並行方式執行此項工作並將其作爲低優先級CPU任務執行?上述機制通過標準的for-loop提供了巨大的性能改進。但是,成本一直是我無法使用我的電腦,即使設置了MaxDegreeOfParallelism
選項。
我該怎麼辦?
不是重複的,但相關的問題[here](http://stackoverflow.com/questions/13089003/set-priority-for-parallel-for-loop) –
謝謝@ledbutter。我認爲這是我發現的使用'ParallelOptions'對象的第一篇文章。但是,我發現我需要將值設置爲非常低,才能看到差異。即使如此,我的電腦速度明顯較慢,但確實可用。這是一種非選擇。 – RLH
順便說一下,'Random'上的非靜態方法不是線程安全的 – harold