簡體   English   中英

MaxDegreeOfParallelism如何運作?

[英]How does MaxDegreeOfParallelism work?

我試圖理解MaxDegreeOfParallelism在調用Parallel.For時如何實際影響並行性。 這是我正在嘗試的代碼:

  static void Main(string[] args)
  {
     var parallelOptions = new ParallelOptions()
        {
           MaxDegreeOfParallelism = 1000,
        };

     Parallel.For(1, 1000, parallelOptions, i =>
        {
           Console.WriteLine(i);
           Thread.Sleep(TimeSpan.FromHours(1));
        });
  }

當我運行此代碼時,我立即看到控制台輸出1到9(在~0.1秒內)。 然后每秒一次添加一個新的數字--10,11,12等等。 同時,在Windows任務管理器中,我看到進程中執行線程的數量隨着每秒一個新線程的增加而增加。

使用此代碼,為什么我不立即看到值1到1000的輸出?

(我意識到這段代碼可能沒有任何意義,並且在我的筆記本電腦上啟動1000個線程可能是一個壞主意,但我想了解這里發生了什么)

編輯:這個問題 - 在我看來 - 錯誤地標記為重復。 我知道MaxDegreeOfParallelism是最大並行度。 當然,如果我有1000個線程同時運行,那么會有大量的上下文切換,但鏈接的問題並沒有解釋它實際上是如何工作的。 如果我只想運行更合理數量的線程,比如32,怎么辦? 我的計算機能夠很好地處理它,但是有了Parallel的行為。如上所述,需要大約20秒的時間來旋轉這些線程。

MaxDegreeOfParallelism指的是並行循環將在任何時間安排的最大工作任務數。

並行度由Parallel類 ,默認任務調度程序和.NET線程池的實現自動管理。 吞吐量在各種條件下都得到優化。

對於非常大程度的並行性 ,您可能還希望使用ThreadPool類的SetMinThreads方法,以便無延遲地創建這些線程。 如果不這樣做,那么線程池的線程注入算法可能會限制線程添加到並行循環使用的工作線程池的速度。 它可能比您想要創建所需數量的線程花費更多時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM