在我的應用程序中,我有許多類可以使用Parallel.For
語句計算他們的任務。每個Parallel.For
使用它自己的ParallelOption
設置最大程度的並行性。線程池和Parallel.For組合 - 有可能
應用程序流程依賴於用戶設置,因此存在如下情況:類A(並行計算)調用類B(也可並行計算)或調用類C(即不使用任何並行計算)。
另一種模式是遞歸調用,在遞歸的每個級別上進行並行計算。
我的問題:
是否可以設置所使用的所有類來完成其calculatins全局線程池和線程的NUMER在全球範圍內控制了應用程序?
是否可以將線程池與Parallel.For
結合使用,以便大部分現有代碼保持不變?
與獨立並行調用相比,線程池有多少開銷(我知道這一切都取決於,最終廣告我需要做一些測試,但也許你有一些好的和壞的過期以及好的建議)
你知道如何控制線程池的大小嗎?如果使用MAXDOP = 10調用Parallel.For,然後在每個線程中調用另一個調用另一個與MAXDOP = 10的Parallel.For的方法,則有多少個線程。Is最大爲10 + 10 * 10? –
@SebastianWidz,你不應該控制線程池的大小,你不能直接這樣做。 .NET運行時幾乎肯定可以更有效地做到這一點。你應該閱讀更多關於[並行循環](https://msdn.microsoft.com/en-us/library/ff963552.aspx)。在2核心系統上將並行度設置爲10可能會減慢整個過程。 – dymanoid
是的,我知道過高的DOP會減慢速度,目前我設置了MAXDOP = Environment.ProcessorCount,但是當一個線程調用一個調用另一個並行循環的方法時會發生什麼情況 - 您會得到線程數量的乘積。這就是我問這個問題的原因。爲所有呼叫一起設置一個常數od線程是不方便的 –