Closed Dradux-dev closed 3 years ago
Grundlegend implementiert, aber es gibt noch ein kleineres Timing Problem.
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.
fad9bbf4395f6f508dbf0f1041514a6c0623c5fb
Unit Tests für Batch in 393a89084f2270b250262087f91f406a2d1b1606 implementiert.
Aufgabenliste für die Counting Semaphore hinzugefügt.
Benchmark hinzugefügt, um nachzuweisen dass der Einsatz eines Threadpools eine gute Idee ist.
Der Benchmark ist erstellt und Issue #8 untersucht die Ergebnisse des Benchmarks nach dem Milestone CPU Implementation.
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