簡體   English   中英

TPL如何在多核處理器中工作

[英]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.ForPLINQ

ParallelEnumerable.Range(0, 100).Select(DoSomeHeavyCalculation).Sum()

*實際上,在某些情況下,該任務可以在相同的實際線程上運行,但這與此處無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM