Cómo funciona TPL en un procesador multinúcleo

I am new to parallel programming in C# 4.0. I understand that Parallel Programming and Multithreading are two different things. Now in TPL if I create a task like below:

 Task<int> task1 = new Task<int>(() => {
                for (int i = 0; i < 100; i++) {
                    sum += DoSomeHeavyCalculation(i);
                }
                return sum;
            });

            // start the task
            task1.Start();

How will this work in the core 2 duo processor. I am actually trying to get my concepts clear.

preguntado el 27 de agosto de 11 a las 18:08

1 Respuestas

The calculation for task1 will be executed on single thread, different* from the one you're currently on. What actually happens depends on the code below the one you posted.

  • If there's nothing there and it's in the main method, the task will probably stop in the middle.

  • Si hay task1.Wait() or something using task1.Result, the current thread will wait until the task is finished and you won't get any performance benefits from using TPL.

  • If there's some other heavy calculation and then something from the previous point, those two computations will run in parallel.

Si quieres ejecutar un for loop in parallel, using all your available cores, you should use Parallel.For or PLINQ:

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

* In fact, the task can run on the same actual thread, under some circumstances, but that's not relevant here.

Respondido 27 ago 11, 23:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.