0 Daumen
453 Aufrufe

Wie viele Thread mit Default-Attributen können auf einem Single-Core 32-Bit Windows-System laufen und warum ist das so? Was passiert, wenn man einen weiteren Thread erzeugen will?

Avatar von

1 Antwort

+1 Daumen
 
Beste Antwort

Jeder neu erzeugte Thread erhält seinen eigenen Stack (für lokale Variablen, Funktionsparameter, Rücksprungadressen etc.) auf dem Adressraum. Es können nicht beliebig viele Threads erzeugt werden. Als Standardwert für den Stack eines Threads wird \(1\)MB reserviert. Ein \(32\)-Bit-Windows-System hat \(2^{32}\) Byte, also \(4\)GB Arbeitsspeicher (\(2\)GB für das System und \(2\)GB für Prozesse). Für Prozesse (auch leichtgewichtige, also Threads) stehen somit nur \(2048\)MB zur Verfügung. Das ergibt (theoretisch) \(2048\) Threads. Ein kleiner Teil des Adressraums wird für Code und Heap verwendet. Somit kommt man experimentell auf nur etwa \(2030\) Threads. Beim dem Versuch einen weiteren Thread zu erzeugen, wird die Funktion CreateThread scheitern, da wir keine Ressourcen mehr zur Verfügung haben. Der Fehler lautet konkret: ERROR_NOT_ENOUGH_MEMORY bzw. ERROR_NO_SYSTEM_RESOURCES.

Avatar von

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community