Dradux-dev / m-ti-vpl-2020

Gruppenarbeit in den Kursen "Entwurf eingebetteter Systeme" und "Modellbasierter Entwurf" des Studiums Technische Informatik - Embedded Systems an der Beuth Hochschule für Technik Berlin.
GNU General Public License v2.0
0 stars 0 forks source link

Multi-Threading umbau auf Threadpool #3

Closed Dradux-dev closed 3 years ago

Dradux-dev commented 3 years ago

Aktuell muss für jede Aufgabe ein neuer ThreadManager erstellt werden, welcher wiederrum eigene Threads erstellt. So kann schnell in einer Applikation die Threadanzahl ins unermessliche gehen (begrenzt durch das Betriebssystem). Besser wäre es, wenn wir einen Pool aus Threads (Threadpool) erstellen könnten, dem wir eine generische Aufgabe übergeben, egal welche. Dann könnten wir verschiedene ThreadManager haben, die alle den gleichen ThreadPool nutzen. Auf diese Weise könnten wir die Anzahl der Threads wirklich begrenzen und würden diese auch vollständig recyclen.

Thread

Threadpool

ThreadManager

ThreadManager (job-based)

ThreadManager (job-based with results)

Batch

Counting Semaphore

Benchmark

Dradux-dev commented 3 years ago

Grundlegend implementiert, aber es gibt noch ein kleineres Timing Problem.

Dradux-dev commented 3 years ago

Die Variablen Thread::isProcessing und Thread::shallSleep waren zwar volatile, aber für sehr kurze Aufträge bspw. die Addition in der Demo (ohne Sleep) konnte es passieren, dass die busy-Semaphore das notify verpasst hat und der initale wait() check aber noch fehlschlug. Die Folge war ein Deadlock. Dies wird nun verhindert, in dem für die beiden genannten Variablen jeweils ein eigener Mutex erstellt wurde. Dies ist nach Recherche auch als best practice empfohlen.

Dradux-dev commented 3 years ago

fad9bbf4395f6f508dbf0f1041514a6c0623c5fb

Dradux-dev commented 3 years ago

Unit Tests für Batch in 393a89084f2270b250262087f91f406a2d1b1606 implementiert.

Dradux-dev commented 3 years ago

Aufgabenliste für die Counting Semaphore hinzugefügt.

Dradux-dev commented 3 years ago

Benchmark hinzugefügt, um nachzuweisen dass der Einsatz eines Threadpools eine gute Idee ist.

Dradux-dev commented 3 years ago

Der Benchmark ist erstellt und Issue #8 untersucht die Ergebnisse des Benchmarks nach dem Milestone CPU Implementation.