Wie viele Threads kann ein Programm sinnvoll haben?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Es gibt Ausnahmefälle, aber mehr als ein paar 100 Threads werden rasch zu teuer (allein schon wegen der Stacks, die auf heutigen OS wenigstens ein paar MB fressen), und ich würde i.d.R. nicht mehr als dutzende Threads verwenden.

Soviele Threads macht man ja nicht mehr, um CPU-gebundene Aufgaben sinnvoll aufzuteilen - kein handelsüblicher PC hat soviele Kerne, die tatsächlich parallel arbeiten können. Das macht man eher, um I/O-gebundene Tasks bequem sequentiell abzuarbeiten, ohne sich mit grausigen Callbacks oder dem nur marginal weniger mühsamen async/await-Hack herumschlagen zu müssen: die Threads sind also tatsächlich die allermeiste Zeit blockiert.

Die Alternative sind dann leichtgewichtige Konstrukte wie die "goroutines" von Go oder die Virtual Threads von Java. Die verhalten sich aus Entwicklersicht fast genauso wie Threads, werden aber transparent auf wenige echte Threads aufgeteilt. Eine Vorstufe davon sind die klassischen Coroutinen, wie es sie schon lange in anderen Sprachen gab.

Die ersten echten Probleme fangen oft ab 100.000 an.

Aber kommt halt drauf an wieviel speicher du hast usw.. Je nach System können auch einige Millionen Threads funktionieren.

Es kommt darauf an, bspw. auf das jewelige Setup. 8 Kerne und 16 Threads machen noch Sinn, aber "virutelle" Threads die diese Zahl der CPU-Spezifikationen übersteigen denke ich haben keinen realen Effekt außer bspw. übersichtliches Thread-Management. So etwas kann man ja gut bei Java erreichen.