prio.powerday: Multithreading mit .NET-Bordmitteln

veröffentlicht von am 23. April 2009

Und weiter geht’s. Bernd und Ralf gehen jetzt näher auf das Thema Multithreading mit .NET-Bordmitteln ein. Hierbei gibt es verschiedene Aspekte:

  • Statisches Threading birgt vor allem ein Problem: Es gibt statische Variablen, die von mehreren Threads gleichzeitig schreibend genutzt werden können.
  • Threading mit instanzierten Klassen: Jeder Thread hat seine eigene Instanz, also zum Beispiel seine eigenen Variablen, was natürlich ein wenig mehr Ressourcen kostet.
  • Steuerung von Threads: Hierbei geht es um die Priorisierung von Threads sowie das Starten, Pausieren und Stoppen von Threads. Die Herausforderung ist hier der jeweils richtige Zeitpunkt, ein Thread zu manipulieren. Außerdem muss man feststellen können, ob ein Thread gewollte beendet wurde. Dies kann per Bool’scher Variable erreicht werden.

  • .NET-Threadpool: Der Pool soll ein einfaches Arbeiten mit mehreren Threads ermöglichen. Diese Threads “leben” meist relativ lang oder werden regelmäßig wiederkehrend benötigt. Es gibt eine maximale Anzahl an Threads innerhalb eines Pools. Wir ein Pool-Thread 30 Sekunden nicht benötigt, wird der Thread aus dem Pool entfernt. Schwierig dabei kann auch sein, dass ein neuer Pool-Thread erst nach einer halben Sekunde erzeugt wird, wenn kein laufender Thread in dieser Zeit beendet wird. Und: Jeder Prozess hat seinen eigenen Thread-Pool.
  • Asynchrone Methoden: Einzelne Aufgaben werden in eigenen Threads ausgeführt. Die hierzu benötigten Methoden heißen BeginInvoke und EndInvoke. Allerdings sind diese Methoden kaum sinnvoll anwendbar.
  • BackgroundWorker: Besteht aus drei Klassen: DoWork, ProgressChanged und ReportProgress.
  • Synchronisierung: Im .NET-Framework gibt es Klassen für die Synchronisierung von Objekten.
  • Atomare Anweisungen: Viele Befehle dürfen nicht unterbrochen werden. Daher stellt die Interlocked-Klasse sicher, das Grundbefehle vollständig ausgeführt werden, wenn mehrere Threads auf die Variablen zugreifen können: Increment/Decrement, Exchange, CompareExchange, Read (new), Add (new). Dies ist zum Beispiel für Sortieralgorithmen wichtig.

Kategorien : Multicore Tags : , ,

Kommentare

Keine Kommentare vorhanden.


Beitrag kommentieren.

Sie müssen angemeldet sein um diesen Beitrag zu kommentieren. [Login | Registrieren]

(erforderlich)

(erforderlich)