Ich muss eine Methode parallelisieren, die einen erschöpfenden paarweisen Vergleich von Elementen in einer Liste durchführt. Die serielle Implementierung ist straight-forward:Geschachtelte Parallel.ForEach Loops auf der gleichen Liste?
foreach (var element1 in list)
foreach (var element2 in list)
foo(element1, element2);
In diesem Fall foo wird den Zustand von element1 oder element2 nicht verändern. Ich weiß es einfach tun verschachtelte Parallel.ForEach Aussagen nicht sicher ist:
Parallel.ForEach(list, delegate(A element1)
{
Parallel.ForEach(list, delegate(A element2)
{
foo(element1, element2);
});
});
Was wäre der ideale Weg, dies die parallelen Aufgaben-Bibliothek zu implementieren?
nicht, dass PFX übernehmen Sie so viele Threads erstellen wird da es parallele Aufgaben gibt - es ist schlauer als das. –
Natürlich nicht. Standardmäßig erstellt es so viele Threads wie Kerne. Das Problem besteht jedoch darin, dass nach jeder Iteration Zeit darauf verwendet wird, herauszufinden, welcher Thread die nächste Iteration ausführen muss. –
Ich denke nicht, dass er sagt, dass es so viele Threads geben wird, nur dass das Enqueueing einer Aufgabe für jeden Funktionsaufruf viel mehr Aufwand haben wird, als nur die PFX-Engine für jede äußere Schleife aufzurufen. – Gabe