Microsoft .NET 4.0在其框架中引入了新的「並行增強」。我想知道做一個使用標準System.Threading函數的應用程序與新的並行增強程序之間有什麼區別。線程與並行處理
線程與並行處理
回答
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響應。您仍然需要爲這些使用線程或異步組件。
這裏有一個很好的Channel9的我看了關於這一主題而回:http://channel9.msdn.com/posts/philpenn/Parallel-Programming-with-NET-Parallel-Extensions/
嗨,亞當,這個鏈接不適合我,說沒有找到頁面,任何其他有用的鏈接 – 2016-02-08 10:18:38
並行處理僅僅是自動創建線程一些花哨的界面。對大多數任務使用並行處理擴展比較容易。
並行框架使用.NET線程模型,下面依次構建Windows線程模型。但是,在通用框架中已經完成了很多優化,以使並行庫更高效。
This blog有額外的細節。
- 1. 並行處理Python線程
- 2. 多線程/並行處理
- 3. C++線程 - 並行處理
- 4. 並行處理N個線程? (更新)
- 5. MultiProgramming,多線程和並行處理?
- 6. 如何分別處理Kafka分區並與Spark執行程序並行處理?
- 7. 與LINQ並行csv處理
- 8. 與Numpy.loadtxt並行處理()
- 9. 線程管理和並行與boost ::線程
- 10. 線程處理
- 11. 處理線程
- 12. 與線程,處理程序和信息處理:「重新啓動」線程
- 13. 並行與線程 - 性能
- 14. 互斥與並行線程
- 15. 線程運行中的處理程序
- 16. 線程的執行處理程序
- 17. 如何準備線程進行處理,並更改正在處理的數據?
- 18. 如何在Java中調用REST端點的並行處理/多線程處理
- 19. 並行處理
- 20. 並行處理
- 21. 春季併發處理多個隊列與單線程池
- 22. Datamining多線程與多重處理
- 23. 線程與異步圖像處理?
- 24. 如何處理與線程退出
- 25. 刪除TXT線與批處理程序
- 26. 處理兩個地圖與多線程
- 27. 多並行並行處理
- 28. 困惑與線程 - 處理程序塊UI線程
- 29. 多線程處理?
- 30. IOCP線程處理
也當你等待任務,你等待所有的子任務不像線程。錯誤handerling對於任務和線程來說要好得多。 – 2010-03-02 16:45:23