..... Könnte sehr interessant für HPC und auch für Forschung und Lehre an Hochschulen werden (Ich hatte einen Kurs für parallele Programmierung an der Uni - gearbeitet wurde auf single-core Rechnern
).
Genau hin gehört?
1.
Multi Threading hat seine Engpässe im Thread Sheduler des Betriebssystems.
(Bevor jetzt irgend ein Windows vs. Linux los geht: Unix und Windows sind beide im Moment nicht optimiert für 25 oder 50 Kerne).
Der Thread Sheduler muss mehrere ebenen der Thread Priorität kalkulieren (Niemand will dass die Start-Leiste hängt weil 4x der Taschenrechner offen ist).
Noch schlimmer ist es bei Echtzeit Betriebsssystemen.
Zum Glück bleibt uns das unter Windows, Unix (und Ablegern) erspart.
Vista hat locker über 60 Threads zu verwalten.
Egal ob auf Single Core oder Multi Core.
2.
Steigt mit der Thread Zahl der Verwaltungsaufwand.
Sowohl auf Betriebssystem Seite, wie in der Anwendung.
Manche Vorgänge lassen sich super parallelisieren (siehe WinRar Multi Core Skalierung).
Aber im "Normalen" Programmier-Alltag muss steigt der Aufwand durch die Kommunikation zwischen den Threads.
Da muss man sehr vorsichtig sein den Main-Thread nicht zu stark zu zentralisieren oder zu viel Logik in die Worker zu lagern.
Entweder sinkt die Multi-Core Skalierung oder Einzelne Threads werden zu Bedeutend, so dass andere auf sie warten.
In den tech Artikeln zu Anno1404 wird ein sehr cleverer Ansatz beschrieben.
Dabei ist jeder Thread ein Logik armer Worker und es gibt eine Art Thread Sheduler im Programm, dass gleichwertige Aufgaben auf die Worker Threads verteilt.
Google Crome ist ein ähnliches Beispiel (Thread pro TAB).
Das schließt natürlich spezielle Threads (z.B. einer für FTP einer für Datei System, einer für Cache, ...) aus.
Und es verlangt, dass alle worker-Threads mit allen Aufgaben umgehen können (weshalb Crome so viel Arbeitsspeicher verbraucht).
3.
Lernt man an der Hochschule immer nur die Grundlagen.
Zum einen fehlt die Zeit für Vertiefung, zum anderen ist dar Grundlevel der Studenten völlig unterschiedlich (was den Prof zwingt low-level zu schieben).
Nichts geht über Praxis-Erfahrung^^
PS:
Ich hab jetzt immer Threads zur Beschreibung benutzt.
Als Grundlage reicht das.
Wenn man aber tiefer in die Programmierung eintaucht muss man sich auch mit dem Unterschied zwischen Thread und Prozess sowie dem Betriebssystem (und wie der Thread Sheduler funktioniert) beschäftigen.
Dass viele Quellen die Begriffe gleich setzten (und Englische mit Deutsche mischen) macht das nicht einfacher.