Update:- JobQueue_Free(), JobQeue_Pause(), JobQueue_Resume(): Reagieren nun sofort und nicht erst nach Abarbeitung aller Jobs
- JobQueue_AddWorker(), JobQueue_RemoveWorker(): Optinaler Parameter um x Worker zu entfernen/hinzuzufügen
- JobQueue_WaitForFinish(): Warten bis alle Jobs erledigt werden
- JobQueue_WaitForJob(): Warten bis ein bestimmter Job erledigt wurde
- JobQueue_Init(): Optinaler Parameter um Stack-Blockgröße einzustellen
- MutexLock bei ReadOnly - Zugriffen auskommentiert
Weiter Details:
Während die Worker pausieren erfolgt durch sie keine Anfragen an die Mutex mehr, ebenso JobQueue_WaitForFinish(), JobQueue_WaitForJob() beantragen beim Warten keinen Mutex Zugriff da alles über Semaphoren getriggert wurde. Der Stack vergößert und verkleinert sich nun Blockweise, wodurch schon ein kleiner Performancegewinn erkennbar wurde. Intern wurden kleine Optimierungen vorgenommen, speziell das neue 3. Expample im Downloadpacket wurde dadurch in der Performace gesteigert, dort balgen sich immerhin 128 Threads um einige Tausend Jobs (~100-110x schneller als seriell). Der MutexLock wurde bei ReadOnly - Zugriffen entfernt, bisher hatte ich damit keine Probleme, sollten doch welche auftreten hab ich ihn sicherheitshalber nur auskommentiert.
Wenn ihr Bugs findet, euch eine bestimmte Funktion wünscht, Kritik oder Verbesserungsvorschläge habt, würde ich mich sehr freuen wenn ihr die hier Posten würdet. Auch interessieren würde mich die Ergebnisse der Demos auf anderen CPU , Single/Dual/Quad/OctaCore, leider hab ich hier nur QuadRechner zum testen. Auch interessant währen Ergebnisse von Intel Xeon und AMD Opteron Prozessoren, da ich das System gerne in Server Software verwenden würde.
@milan1612 & Kiffi:
Danke, fühle mich geehrt. Werde natürlich so weitermachen.
Das größte Lob ist es wenn sich Leute die Mühe machen einen Code zu testen, ihn sich anzusehen und dem Programmierer ihre Ergebnisse und Verbesserungsvorschläge mitteilen. Danke @ freak, das hat mir wirklich sehr geholfen.
Download im 1. Post