System.Threading

Nachdem ich mit der Datenbank wieder ein Stück weiter bin, habe ich mir die Threads vorgenommen.

Threading ist für mich immer noch eine der kompliziertesten Arten ein Programm zu schreiben. Moderne Multicore Architekturen machen es möglich Programme über mehrere Threads zu beschleunigen, das Programmieren und das Debuggen dieser Anwendungen macht aber immer noch keinen Spaß. Vielleicht habe ich auch nur noch keine „Best Practise“ dafür entwickelt.

Also habe ich eine Testanwendung gebastelt, die einen kleinen Unit-Test meiner Klassen durchführt. Dabei werden Objekte über Konstruktoren erzeugt, in eine Queue geschrieben, von Threads wieder entnommen. In den Threads werden dann noch die Memberfunktionen getestet.

Wie man in dem folgenden Screenshot sehen kann, sind bei über 3,3 Mio. Threads (und ebenso vielen Objekten) 450 Fehler aufgetreten:

System.Threading

Bei diesen Fehlern handelt es sich um Threads die eine leere Queue vorfinden und deshalb vorzeitig geschlossen werden müssen.

Diese Fehler sind nicht schön, aber eigentlich auch kein Problem. Wenn eine Queue leer ist und der Thread nicht starten kann dann bleibt auch keine Arbeit liegen. Wenn pro 7.000 Threads einer umsonst erzeugt wird, wirkt es sich nicht einmal auf die Performance besonders aus.

Ich hoffe, dass ich irgendwann mit System.Threading soweit bin, dass meine Programme überhaupt keine Fehler mehr machen. Bis dahin werde ich weiterhin mit Softwaresollbruchstellen schreiben.

Share this content: