【C# Parallel】ParallelOptions


ParallelOptions 構造函數

此構造函數用默認值初始化實例。 MaxDegreeOfParallelism 初始化為-1,表示沒有對應采用的並行度進行上限設置。 CancellationToken 初始化為不可取消的標記,並 TaskScheduler 初始化為默認計划程序 (TaskScheduler) 。

所有這些默認值都可以使用實例上的屬性集訪問器進行覆蓋。

屬性

MaxDegreeOfParallelism:獲取或設置此 ParallelOptions 實例所允許的並發任務的最大數目。

MaxDegreeOfParallelism屬性影響通過 Parallel 此實例傳遞的方法調用所運行的並發操作的數量 ParallelOptions屬性值為正會將並發操作數限制為所設置的值。 如果為-1,則對並發運行的操作的數量沒有限制。

默認情況下, ForForEach 將使用基礎計划程序提供的多個線程,因此, MaxDegreeOfParallelism 從默認值更改僅限制將使用的並發任務數。

通常情況下,不需要修改此設置。 但是,你可以選擇在高級使用方案中顯式設置此項,例如:

  • 當你知道所使用的特定算法不能擴展到超出一定數量的內核時。 可以設置屬性,以避免在額外的內核上浪費循環。

  • 同時運行多個算法,並希望手動定義每個算法可以利用的系統量。 可以 MaxDegreeOfParallelism 為每個設置一個值。

  • 當線程池的試探法無法確定要使用的正確線程數時,可能最終會注入太多線程。 例如,在長時間運行的循環正文迭代中,線程池可能無法判斷合理進度或 livelock 或死鎖之間的差異,並且可能無法回收添加的線程以提高性能。 在這種情況下,可以設置屬性以確保使用的線程數不超過合理。

案例

 

//paralle
TaskScheduler taskScheduler = TaskScheduler.Default;
CancellationTokenSource cts=new CancellationTokenSource();
ParallelOptions paraOP = new() { MaxDegreeOfParallelism = 2};
paraOP.TaskScheduler = taskScheduler;
paraOP.CancellationToken = cts.Token;
Parallel.For(1,10,paraOP,i =>{ Console.WriteLine(i+ "ThreadId" + Environment.CurrentManagedThreadId); });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM