| 

.NET C# Java Javascript Exception

2
In .NET-Anwendungen ist es möglich mehrere Arbeiten parallel über Threads auszuführen. Das Starten via System.Threading ist ja noch durchschaubar. Wie erreiche ich, das Threads nur bei bestimmten Voraussetzungen gestartet werden (z.B. freier Mindestspeicher, freie Rechenkapazität) und wie, das Threads automatisch gerstoppt oder pausiert werden, wenn Arbeitsspeicher oder Rechenzeit knapp wird. Bietet .NET diese Funktionalität an oder muss ich sowas selbst implementieren (am besten Thread-übergreidend)? Wer kennt Lösungsansätze und/oder Open-Source-Komponenten, die sowas leisten?
News:
02.11.2011
Jannes B. 11 2
3 Antworten
2
Wieso willst du laufende Threads einfach so abschießen?

Wenn du bestimmte Aufgaben zu erfüllen hast, dann benutze doch einen Threadpool. Der Pool wird dann immer mit so vielen Threads gestartet, wie es Kerne gibt. Threadpools wird es hoffentlich auch so schon geben, komme da eher aus der Java-Welt.

Ein zusätzlicher Thread frisst dann auch nicht soviel Speicher, dass du dir darüber sorgen machen müsstest.

Und wenn die Rechenzeit grad knapp wird, dann würde ich das System auch nicht noch mehr damit belasten, dass ich Thread abschieße und den Speicher danach wieder aufräumen lasse. Das Betriebssystem weist dem Thread dann halt weniger Zeit zu.
02.11.2011
LiRo 1,3k 1 9
0
Das Problem mit dem Stoppen hatte ich auch vor einigen Wochen. So richtig befriedigende Lösungen für meinen Teil des Codes hatte ich nicht gefunden. Aber immerhin, 2 Möglichkeiten bestehen, die zumindest mit VB 2010 noch unterstützt werden (wenngleich der Compiler mault und Warnungen ausspuckt):

thread.Suspend()
thread.Resume()

Ersteres pausiert und Zweiteres macht weiter. Gelöst hatte ich das über eine Byte-Hilfsvariable, die in regelmäßigen Abständen von Mutterthread gecheckt wird.
03.11.2011
muffi 1,4k 1 9
0
direkt auf Threads zuzugreifen ist ja im Grunde schon die "Hardcore" Lösung. Wenn du irgendwie die Chance hast, dann solltest du vermutlich eher auf Libraries zurück greifen, die das parallelisieren von Programmabläufen ordentlicher strukturieren. Perfekt dafür ist beispielsweise die Task Parallel Library die mit .NET 4.0 dazu gekommen ist.

Dort kannst du Arbeitspakete schnüren, die dann vom System intelligent unter Berücksichtigung der verfügbaren Resourcen (z.B. mit dem Thread Pool - siehe Antwort von LiRo) arbeiten.

Ansonsten sind Konstrukte wie der Background-Worker (seit .NET 2.0 dabei) oder nativen C#-Features wie "asyc" und "await" (kommt mit .NET 4.5) für dich ganz interessant.
07.11.2011
tomwendel 41 2

Stelle deine .net-Frage jetzt!