9.13 Grenzen von Threads
 
Obwohl Threads eine feine Sache sind, gibt es Grenzen: Jeder Thread läuft mit einer bestimmten Priorität. Laufen alle mit der gleichen Priorität, so sollte angenommen werden, dass auch tatsächlich alle Threads einmal drankommen – dies ist aber nicht unbedingt der Fall. POSIX1
definiert eine ganze Reihe von Scheduling-Algorithmen, welcher wirklich vom Laufzeitsystem umgesetzt wird, bleibt offen. Genau genommen gibt Java noch viel schwächere Garantien über Threads ab als der POSIX-Standard.
Mitunter stellt sich die Frage, wie viele Threads überhaupt gestartet werden können – mal ganz davon abgesehen, mit wie vielen sich noch ausreichend arbeiten lässt. Obwohl nicht ganz abgrenzbar, kann doch eine Rechnung aufgemacht werden. Unter JDK 1.0 verbraucht jeder Thread schon einmal 400 KB Stack-Größe. Ein Unix-System verfügt in der Regel über einen Adressraum von 2 GB. Theoretisch erlaubt dies 5000 Threads. Kleine empirische Tests zeigen aber, dass bereits ab 2000 Threads kein Arbeiten mehr möglich ist. Spezielle Server-JVMs skalieren mitunter besser, etwa IBM WebSphere und ähnliche Produkte. Sie arbeiten ohne native Threads, also mit Green-Threads, und kommen mit unter 400 KB Stack pro Thread aus.
1
Ein portierbares Betriebssystem-Interface der Standardisierungsgruppe P1003 des IEEE. 1988 wurde als erster Standard 1003.1 das Kernel-Interface ausgemacht.
|