我聽說.NET 4團隊已經在框架中添加了新的類,使得線程的工作變得更加容易。.NET 4中的多線程改進
基本上問題是運行.NET 4中添加多線程任務的新方法是什麼,它們設計用於什麼目的?
UPD:只是要清楚,我不是在尋找.NET 4的並行運行任務的一個的方式,我想找出所有的新的增加,有可能的話是什麼情況會他們每個是最適合..
我聽說.NET 4團隊已經在框架中添加了新的類,使得線程的工作變得更加容易。.NET 4中的多線程改進
基本上問題是運行.NET 4中添加多線程任務的新方法是什麼,它們設計用於什麼目的?
UPD:只是要清楚,我不是在尋找.NET 4的並行運行任務的一個的方式,我想找出所有的新的增加,有可能的話是什麼情況會他們每個是最適合..
由於缺乏迴應,我決定評估下面的答案,我學到了...... 正如@Scott所說,.NET 4增加了Task Parallel Library,它增加了許多創新,新方法和並行的方法。
Parallel.For
和Parallel.ForEach
方法,它允許開發人員來處理多個線程的多個項目。這種情況下的框架將決定需要多少個線程,以及何時創建新線程以及何時不需要。 .Where
子句過濾對象列表,現在將在多個線程中運行!Task
類。在某些方面,它可能看起來像已經熟知的Thread
類,但它利用了.NET 4中的新線程池(與以前的版本相比已經有了很大的改進),並且功能比常規的Thread
類。例如,您可以將任務鏈中間的任務只在前一個任務完成時啓動。關於Channel 9的屏幕錄像中的示例和深入說明BlockingCollection<>
。這適用於您有生產者 - 消費者場景的情況。你可以有多個線程產生一些對象,這些對象將被消費者方法消費和處理。這可以通過任務工廠和阻塞集合輕鬆並行和控制。有用的截屏視頻,例如Channel 9CountdownEvent
類,它可以幫助我們完成「任務協調情景「(c)。基本上允許我們等待所有並行任務完成。截屏以實例的使用上Channel 9你可以看到一些標記有第9頻道截屏和視頻的"Parallel Computing"
是,.NET 4中,添加Task Parallel Library其中,在較高的水平,增加了支持:
Parallel.For
和運行並行循環Parallel.Invoke
或Task
類接聽更新原來的問題創建或運行任務...
的TPL是優選的使用.NET編寫並行任務的方式4.您仍然可以自己創建線程池項目,並執行所有與以前相同的「手動」線程技術。需要記住的是,整個線程池(以及幾乎所有線程相關的)已被重寫,以利用TPL。這意味着即使你自己創建了一個線程池項目,你仍然會使用TPL,即使你不知道它。另外要記住的是TPL更加優化,根據可用處理器的數量,可以更適當地擴展。
至於知道他們每個人最適合的情況,沒有「銀彈」的答案。如果你以前排隊你自己的線程池項目(或者以其他方式做多線程),你可以修改你的代碼部分來使用TPL,而不會有任何後果。
對於並行循環或並行查詢之類的事情,您需要分析代碼和代碼的執行情況,以確定是否適合並行化。
1爲TPL參考和一對夫婦的例子..但TPL是.NET中的一個完整的庫,而我正在尋找更具體的例子。 – 2010-04-25 11:44:33
TPL是一個完整的庫,但是它是作爲.NET 4的一部分添加的,多線程的應用程序在.NET 4中。看到你的答案和我的相似,我沒有看到這怎麼回答你的問題。 – 2010-04-25 13:19:02
我知道TPL是在.NET4中添加的,我知道這是首選方式。我在tpl內部尋求類和方法。我的答案描述了其中的一些+例子,你只是指出了3,並且根本沒有例子/解釋。 – 2010-04-25 17:19:33
嚴格地說,這是C#4.0,而不是一個新的類,但事件now have a smarter form of locking這要是我理解正確的變化,去除需要如下所示(由喬恩斯基特從this article採取的)鎖定碼的reems:
SomeEventHandler someEvent;
readonly object someEventLock = new object();
public event SomeEventHandler SomeEvent
{
add
{
lock (someEventLock)
{
someEvent += value;
}
}
remove
{
lock (someEventLock)
{
someEvent -= value;
}
}
}
是否有任何單一的生產者/單一消費者樣本代碼? – Xaqron 2010-10-21 19:36:50