2010-02-25 176 views
31

Microsoft .NET 4.0在其框架中引入了新的「並行增強」。我想知道做一個使用標準System.Threading函數的應用程序與新的並行增強程序之間有什麼區別。線程與並行處理

回答

36

Parallel Extensions和常規線程之間最重要的區別可能是控制流。

使用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秒的延遲發生任何事情之前,那麼「測試」的轉換消息按隨機順序排列,然後然後文本Finished

換句話說,並行運行任務實際上並不改變程序流程。它將在不同的線程上運行不同的任務,以便它們可以在多個CPU內核上執行,以提高程序的整體吞吐量,但就典型程序員而言,這些任務並不真正運行在「後臺「因爲他們會用線程。您不必改變程序的結構,或者在工作完成時做任何特殊的事情來通知。您無法控制裏面會發生什麼情況,但您確實知道該塊在所有並行任務完成之前不會返回控制權。

雖然並行擴展是爲這個偉大的,它承擔提的是,PX是沒有用的,任何當你真正需要在後臺運行一個任務,如實施調度,或委託給工作線程,以保持UI響應。您仍然需要爲這些使用線程或異步組件。

+0

也當你等待任務,你等待所有的子任務不像線程。錯誤handerling對於任務和線程來說要好得多。 – 2010-03-02 16:45:23

-2

並行處理僅僅是自動創建線程一些花哨的界面。對大多數任務使用並行處理擴展比較容易。

1

並行框架使用.NET線程模型,下面依次構建Windows線程模型。但是,在通用框架中已經完成了很多優化,以使並行庫更高效。

This blog有額外的細節。