2013-08-05 10 views
5

Wird eine C# -Aufgabe auf einem Kern ausgeführt?Wird eine C# -Aufgabe auf einem Kern ausgeführt?

Ich habe ein Projekt, wo ich entscheiden muss, wie viele Aufgaben zu erstellen sind. Ich muss so viele erstellen, wie der Computer aufnehmen kann. Ist das die Anzahl der Prozessoren, Kerne oder logischen Prozessoren, bin ich zwischen den drei Optionen verwirrt.

+0

Wie ich es verstehe, wird ein verwalteter Thread nicht einmal unbedingt auf seinem eigenen nativen Thread ausgeführt. Also ich denke die Antwort auf Ihre Frage ist "weder". – ken

+1

Eine Aufgabe funktioniert sehr ähnlich wie ein Thread, für den sie ausgeführt wird (glaube ich). Um Ihre Fragen zu beantworten, hängt es von Ihren Aufgaben ab, welche Ressource sie am meisten CPU/IO/Memory/Disk benutzen ...? – TheKingDave

+0

Eine Aufgabe kann von einem Kern zum anderen springen. Was Sie wirklich fragen sollten, ist "Läuft eine Aufgabe auf mehr als einem Kern?". Nr. –

Antwort

3

Eine Task wird auf einem Thread ausgeführt. Das Betriebssystem plant Threads für Kerne. Kerne sind ein logisches Konzept und unterscheiden sich von physischen CPU-Chips.

Erstellen Sie Environment.ProcessorCount Aufgaben, oder besser verwenden Sie eine der höheren Ebene TPL Konstrukte wie PLINQ oder Parallel.

0

Wenn Sie die Task-Bibliothek (PTL) verwenden, brauchen Sie sich darüber keine Gedanken zu machen. Sie können mehr darüber lesen here. Kurz zusammengefasst:

Der TPL skaliert den Grad der Parallelität dynamisch, um alle verfügbaren Prozessoren effizient zu nutzen. Darüber hinaus übernimmt die TPL die Aufteilung der Arbeit ...

Wir haben ein Wrapper um Aufgabe erstellt haben, wie folgt:

public static class PeriodicTaskFactory 
{ 
    public static Task Start(Action action, int intervalInMilliseconds = -1, int delayInMilliseconds = 0, int duration = -1, int maxIterations = -1, bool synchronous = false, CancellationToken cancelToken = null, TaskCreationOptions periodicTaskCreationOptions = TaskCreationOptions.None); 
} 

Und dann nennen wir es wie so. In diesem Fall ist die einzige Arbeit, die wir ausführen möchten, das Aufrufen einer einzelnen Methode alle 1 Minuten mit einer Verzögerung von 1 Sekunde in der ersten Ausführung.

 PeriodicTaskFactory.Start(() => 
     { 
      CdClMappingLogic.Invoke(); 
     }, 60000, 1000, -1, -1, true) 
+0

Können Sie bitte genauer sein? Ja, ich lese dieses Dokument tatsächlich. – user2381422

+0

Grundsätzlich was er hier speichert ist, dass du in TPL die Arbeit definierst und das Framework ausarbeiten lässt wie viele Threads ... etc zu erstellen sind. Sie definieren nur, was jeder Thread tun soll. – TheKingDave

+0

@ user2381422 - Ja, wie TheKingDave sagte, es ist sehr einfach zu benutzen. Sie definieren, welche Arbeit Sie ausführen möchten, wickeln Sie sie in eine Aufgabe ein und die .NET FW entscheidet, wie dieser Arbeitsblock basierend auf CPUs und anderen Ressourcen am besten ausgeführt werden kann. –

Verwandte Themen