2010-10-21 45 views
5

這個問題可能是主觀的,但我只想知道什麼時候使用TPL以及何時使用本地線程的同步(evnts,等待句柄)。任務並行庫vs原生線程同步

本地線程同步技術會在未來過時嗎?

謝謝

回答

4

使用TPL的地方,因爲它是一種更清晰,更具說明性的方式來表達您的並行性需求。

MSDN解釋「TPL動態擴展併發度以最有效地使用所有可用的處理器。此外,TPL處理工作分區,ThreadPool上線程的調度,取消支持,狀態管理和其他低級細節,通過使用TPL,您可以最大限度地提高代碼的性能,同時關注您的程序旨在完成的工作。「

另請參閱http://www.albahari.com/threading/part5.aspx其中詳述了「數據並行」和其他TPL好處的好處。

1

並行擴展很適合並行化小任務。並行擴展確實提供了代碼結構。例如ForEach替換了正常的foreach語句,而是將它們並行執行。這是平行擴展旨在用於的級別。

當您創建一個完整的多線程應用程序(例如Web服務器)時,仍然需要使用正常的線程和同步。當然,WCF和IIS已經爲你解決了這些問題。

當然,有線程池解決的中間地帶。

1

任務並行庫不主要用於線程同步,它設計用於實現更多任務。 TPL旨在便於執行以下步驟:

  1. 將其分成小塊。
  2. 通過多線程並行執行這些塊。
  3. 以線程安全和高性能的方式在結果可用時對結果進行整理。

只有第三項與線程同步有關。當然,您仍然可以使用已知的線程同步原語以線程安全的方式執行歸類結果(例如,當您應該自行整理此結果時,使用類Parallel)。