Multi-Core-Nutzung, Threads, Thread-Pools

Ich habe einige Fragen zur Multithread-Programmierung und zur Verwendung von Multicores.

Insbesondere frage ich mich, wie das Betriebssystem und / oder das Framework (dies ist .NET) mit stark genutzten Kernen umgeht.

Hier sind meine Fragen zu den Themen:

Wenn ein neuer Thread erzeugt wird, welcher Algorithmus weist den Thread einem bestimmten Kern zu? Round-Robin-AlgorithmusZufälliDer derzeit am wenigsten genutzte KernWenn nicht der derzeit am wenigsten verwendete Kern, würde diese Art von Code, der diesen Zwerg bestimmt, die typische Verwendung eines Threads und damit die Sache nur verschlimmern?Sind Threads während ihres Lebens von einem Kern auf einen anderen verschoben? Wenn ja, handelt es sich dabei um Kerne, die aus irgendeinem Grund "überbeansprucht" werden, und daher versucht das Betriebssystem, Threads auf weniger genutzte Kerne zu verschieben, um dem System zu helfen? Wenn nicht, warum nicht?

Meine letzte Frage, bei der es sich im Grunde genommen um eine Wiederverwendung des oben Gesagten handelt, betrifft die .NET ThreadPool-Klasse, die Dinge wie .BeginInvoke und dergleichen behandelt. Macht diese Klasse irgendetwas davon? Wenn nicht, warum nicht?

Ist es eine Möglichkeit, diese Behandlung zu optimieren, sozusagen ein Hinweis für das Betriebssystem, dass dieser bestimmte Thread etwas mehr Aufmerksamkeit erhält, wenn Sie ihm einen Kern zuweisen, da ich weiß, dass er eine Menge CPU verbrauchen wird. Wäre das sinnvoll? Oder wäre "a lot of cpu" nur relativ und damit nicht wirklich gut genug?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage