[英]How TPL works in a multicore processor
我是C#4.0中並行編程的新手。 我知道並行編程和多線程是兩回事。 現在在TPL中,如果我創建如下任務:
Task<int> task1 = new Task<int>(() => {
for (int i = 0; i < 100; i++) {
sum += DoSomeHeavyCalculation(i);
}
return sum;
});
// start the task
task1.Start();
在Core 2 Duo處理器中這將如何工作。 我實際上是想弄清楚我的概念。
task1
的計算將在單線程上執行,與當前執行的線程*不同。 實際發生的情況取決於您發布的代碼下方的代碼。
如果沒有任何東西,並且在main方法中,那么任務可能會在中間停止。
如果有task1.Wait()
或使用task1.Result
東西,當前線程將等待任務完成,並且使用TPL不會帶來任何性能優勢。
如果還有其他一些繁重的計算,然后還有上一點的內容,那么這兩個計算將並行運行。
如果要使用所有可用內核並行運行for
循環,則應使用Parallel.For
或PLINQ :
ParallelEnumerable.Range(0, 100).Select(DoSomeHeavyCalculation).Sum()
*實際上,在某些情況下,該任務可以在相同的實際線程上運行,但這與此處無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.