Planung
Ihre 1.805 Threads werden nicht gleichzeitig ausgeführt . Sie tauschen sich aus. Ein Kern führt ein Stück des Threads aus und legt es dann beiseite, um ein Stück eines anderen Threads auszuführen. Die anderen Kerne machen dasselbe. Rund und rund, Threads werden ein wenig nach dem anderen ausgeführt, nicht alle auf einmal.
Eine Hauptverantwortung des Betriebssystems (Darwin und macOS) ist die Planung, welcher Thread wie lange auf welchem Kern ausgeführt werden soll.
Viele Threads haben keine Arbeit zu erledigen und bleiben daher ruhend und außerplanmäßig. Ebenso warten möglicherweise viele Threads auf eine Ressource, z. B. Daten, die aus dem Speicher abgerufen werden sollen, oder eine Netzwerkverbindung, die abgeschlossen werden soll, oder Daten, die aus einer Datenbank geladen werden sollen. Da fast nichts anderes zu tun ist, als den Status der erwarteten Ressource zu überprüfen, werden solche Threads, wenn überhaupt, recht kurz geplant.
Die App-Programmiererin kann diesen Planungsvorgang unterstützen, indem sie ihren Thread für eine bestimmte Zeit in den Ruhezustand versetzt, wenn sie weiß, dass das Warten auf die externe Ressource einige Zeit dauern wird. Und wenn eine „enge“ Schleife ausgeführt wird, die CPU-intensiv ist und keinen Grund hat, auf externe Ressourcen zu warten, kann der Programmierer einen Aufruf an die Freiwillige einfügen, der kurz beiseite gelegt werden soll, um den Kern nicht zu belasten und dadurch die Ausführung anderer Threads zu ermöglichen.
Weitere Informationen finden Sie auf der Wikipedia-Seite für Multithreading .
Gleichzeitiges Multithreading
Was Ihre verknüpfte Frage betrifft, so sind die Threads dort tatsächlich dieselben wie hier.
Ein Problem sind die Overhead-Kosten für das Wechseln zwischen Threads, wenn dies vom Betriebssystem geplant wird. Das Entladen der Anweisungen und Daten des aktuellen Threads aus dem Kern und das anschließende Laden der Anweisungen und Daten des nächsten geplanten Threads ist mit erheblichen Zeitkosten verbunden. Ein Teil der Aufgabe des Betriebssystems besteht darin, bei der Planung der Threads klug zu sein, um diese Gemeinkosten zu optimieren.
Einige CPU-Hersteller haben Technologien entwickelt, um diese Zeit zu verkürzen und den Wechsel zwischen zwei Threads zu beschleunigen. Intel nennt ihre Technologie Hyper-Threading . Allgemein bekannt als simultanes Multithreading (SMT) .
Während das Thread-Paar nicht gleichzeitig ausgeführt wird, ist das Umschalten so reibungslos und schnell, dass beide Threads praktisch gleichzeitig zu sein scheinen. Dies funktioniert so gut, dass sich jeder Kern dem Betriebssystem als ein Paar virtueller Kerne präsentiert. So präsentiert sich beispielsweise eine SMT-fähige CPU mit vier physischen Kernen dem Betriebssystem als Acht-Kern-CPU.
Trotz dieser Optimierung ist das Umschalten zwischen solchen virtuellen Kernen immer noch mit einem gewissen Aufwand verbunden. Zu viele CPU-intensive Threads, die alle nach einer auf einem Kern geplanten Ausführungszeit verlangen, können das System ineffizient machen, ohne dass ein Thread viel Arbeit erledigt. Wie drei Bälle auf einem Spielplatz, die von neun Kindern geteilt werden, im Vergleich zu neunhundert Kindern, bei denen kein Kind wirklich ernsthaft mit einem Ball spielt.
Daher gibt es in der CPU-Firmware eine Option, mit der ein Systemadministrator einen Schalter auf dem Computer betätigen kann, um SMT zu deaktivieren, wenn er entscheidet, dass dies seinen Benutzern zugute kommt, die eine App ausführen, die ungewöhnlich CPU-gebunden ist und nur sehr wenige Möglichkeiten zum Anhalten bietet.
In einem solchen Fall kehren wir zu Ihrer ursprünglichen Frage zurück: In dieser speziellen Situation möchten Sie die Operationen tatsächlich so einschränken, dass nicht mehr dieser hyperaktiven Threads als physische Kerne vorhanden sind. Aber lassen Sie mich wiederholen: Dies ist eine äußerst ungewöhnliche Situation, die in so etwas wie einem speziellen wissenschaftlichen Datenverarbeitungsprojekt auftreten kann, aber fast nie für gängige Geschäfts- / Unternehmens- / Unternehmensszenarien gelten würde.