Dot-Net

執行緒與並行處理

  • February 25, 2010

Microsoft .NET 4.0 為其框架引入了新的“並行增強”。我想知道製作使用標準 System.Threading 函式的應用程序與新的並行增強功能之間有什麼區別。

並行擴展和正常執行緒之間最重要的區別可能是控制流。

使用new Thread(...)ThreadPool.QueueUserWorkItem將在完全不確定的時間點終止的執行緒。如果您編寫此程式碼:

ThreadPool.QueueUserWorkItem(() =>
   {
       Thread.Sleep(1000);
       Console.WriteLine("Work Finished");
   });
Console.WriteLine("Item Queued");

文本Item Queued將立即出現,並Work Finished在大約 1 秒延遲後列印。

另一方面,如果您使用並行擴展編寫類似的東西:

Parallel.For(0, 10, i =>
   {
       Thread.Sleep(1000);
       Console.WriteLine("Test {0}", i);
   });
Console.WriteLine("Finished");

在這種情況下,您會看到在發生任何事情之前有 1 秒的延遲,然後是一系列隨機順序的“測試”消息,然後是 text Finished

換句話說,並行執行任務實際上並不會改變程序流程。它將在不同的執行緒上執行不同的任務,以便它們可以在多個 CPU 核心上執行,以提高程序的整體吞吐量,但就典型的程序員而言,這些任務並不是真正執行在“後台” “就像他們會用一根線一樣。您不必更改程序的結構或做任何特別的事情來在工作完成時收到通知。您無法控制並行塊內部發生的事情,但您知道在所有並行任務完成之前該塊不會返回控制權。

儘管 Parallel Extensions 對此非常有用,但值得一提的是,當您實際需要在後台執行任務(例如實現調度程序或委派給工作執行緒以保持 UI 響應時)時,PX 毫無用處。您仍然需要為此使用執行緒或非同步組件。

引用自:https://stackoverflow.com/questions/2331659