2016-06-29 8 views
3

Ich sehe das unten von QueuedTaskScheduler.csdocumentation, aber es ist nicht sehr klar für mich.C# - QueuedTaskScheduler - threadCount vs maxConcurrencyLevel

threadCount - Die Anzahl der Threads, die zum Verarbeiten von Arbeitselementen erstellt und verwendet werden sollen.
maxConcurrencyLevel - Der maximale Grad an Parallelität, der für die Arbeit dieses Schedulers zulässig ist.

Frage - Was ist der Unterschied zwischen threadCount & maxConcurrencyLevel?

+0

sehen Wo ist das QueuedTaskScheduler? – i3arnon

+0

Es ist einer der Task-Scheduler von https://www.nuget.org/packages/MSFT.ParallelExtensionsExtras/ – user441918

Antwort

3

threadCount ist eine Reihe von physikalisch erstellten Threads für Ihre Aufgaben mit Scheduler getan werden. Dies bedeutet, dass Ihre Anwendung eine Reihe von Threads mit einem bestimmten Limit erstellt.

Gewindesteuerung. Die Prioritäts-, Fairness- und Nebenläufigkeitsstufensteuerung gelten alle, wenn auf einer anderen TaskScheduler sowie bei Verwendung mit dedizierten Threads für den Scheduler verwendet wird. bietet jedoch auch eine sehr niedrige Kontrolle über die Threads, die vom Scheduler verwendet werden, wenn dedizierte Threads angefordert werden.

maxConcurrencyLevel ist eine Anzahl von gleichzeitig Aufgaben in Ihrem Scheduler ausgeführt wird. Dies bedeutet, dass Ihr Scheduler eine begrenzte Anzahl von Aufgaben gleichzeitig bearbeitet.

Nebenläufigkeitsstufen. In einem großen System möchten Sie möglicherweise steuern, wie viel Parallelität zu verschiedenen Teilen des Systems besteht. Mit parallelen Schleifen und PLINQ-Abfragen können Sie dies auf einer Schleife oder pro Abfrage steuern, aber es gibt keine Möglichkeit, es über Schleifen hinweg zu steuern, und es gibt keine integrierte Möglichkeit, es zu steuern Aufgaben. Durch Planen aller verwandten Arbeiten auf eine TaskScheduler, die eine maximale Parallelitätsebene erzwingt, wird diese Funktionalität gewonnen.

Diese Zahlen sieht sehr ähnlich, aber sie sind insomethat unterschiedlich. Die Anzahl der Threads sollte nahezu der Anzahl der Kerne auf Ihrem Anwendungsserver entsprechen, da dies theoretisch dazu beiträgt, den Overhead des Kontextwechsels zu vermeiden.

Wie für die Nebenläufigkeit Ebene könnte diese Zahl entweder gleich der Anzahl der Threads (oder Anzahl der Threads + 1) oder es könnte viel größer als es sein, wenn Ihre Aufgaben ziemlich klein sind, so dass die Prozessoren tun sie schnell.

Alles in allem sollten Sie verschiedene Kombinationen ausprobieren und Ihre Systemleistung messen.

Auch können Sie einige Beispiele auf related post on MSDN blogs

+0

Danke für die Klarstellung. Ich bin immer noch nicht sehr klar auf dem Begriff Nebenläufigkeit. Wenn ich 20 verschiedene Abfragen parallel ausführe, was steuert dann deren Nebenläufigkeit? Muss ich eine Sperranweisung im Code hinzufügen? – user441918

+0

TPL kontrolliert die Anzahl der gleichzeitigen Aufgaben selbst, es sind keine Sperren von Ihnen erforderlich - nur wenn Sie eine Synchronisation benötigen – VMAtm

+0

Danke für die Info. – user441918