Denken Sie daran, dass jeder Thread Stapelspeicher reservieren muss. Aus diesem Grund gibt es eine Begrenzung für die Anzahl der Threads, die du spawnen kannst. Es sieht so aus, als ob du entweder dieses Limit erreichst oder der Boost dich daran hindert, dieses Limit zu erreichen.
Hier finden Sie eine Verknüpfung zur neuesten Boost-Dokumentation, die das von Ihnen beobachtete Verhalten dokumentiert (die ausgelöste Ausnahme): Thread-Dokumente laden (Suche nach boost :: thread_resource_error auf dieser Seite)
Wieviel Sie spawnen können, hängt von den Einschränkungen Ihrer Betriebsumgebung ab. Und ja, boost::thread_resource_error
ist das, was Sie erwarten sollten, wenn es nicht die richtigen Thread-Ressourcen bekommt, die es benötigt, nach der Dokumentation
Sie treffen ein hartes Limit. Wie andere gesagt haben, gibt es zwei Einschränkungen:
Das ist übrigens so interessant an Google Go-Routinen. Anstatt so viele Threads wie möglich hervorzubringen, passt die Go-Laufzeit die Anzahl der Threads an die Anzahl der verfügbaren Kerne an und multiplext die Routinen dieser physischen Threads manuell.
Darüber hinaus sind die Routinen leicht (reserviert nur 4 KB pro Stück), weil sie keinen herkömmlichen Stapel verwenden (Verschwinden des Stapelüberlaufs!), was bedeutet, dass Sie effektiv einige tausend Routinen auf einer typischen Maschine und es überspannen können kostet dich nicht viel.
Wenn Sie mit extremer Parallelität experimentieren möchten:
Tags und Links c++ multithreading concurrency boost