Sind .NET-Threads anders als Betriebssystem-Threads?

Sind .NET-Threads leichte Benutzermodus-Threads oder sind sie Kernelmodus-Betriebssystem-Threads?

Auch gibt es unter Ausschluss von SQL Server eine Eins-zu-Eins-Entsprechung zwischen einem .NET-Thread und einem Betriebssystem-Thread?

Ich bin auch fasziniert, weil dieThread Klasse mit einem symmetrischen Methodenpaar namensBeginThreadAffinity undEndThreadAffinity, dessen Dokumentation subtil nahe legt, dass .NET-Threads einfache Abstraktionen gegenüber echten Betriebssystem-Threads sind.

Auch habe ich vor einiger Zeit in einem Stapelüberlauf-Thread selbst gelesen, dass Microsoft einen Versuch unternommen hat, diese Trennung in der CLR beizubehalten, wie dies bei SQL Server der Fall ist. Ich erinnere mich, dass ein Projekt zur Verwendung der Fibre-API für diesen Zweck im Gange war, aber ich kann nicht sagen, dass ich alle Details meiner Lektüre verstanden habe.

Ich hätte gerne etwas ausführlichere Literatur zu diesem Thema, beispielsweise die interne Struktur eines .NET-Threads gegenüber der eines von Windows erstellten Threads. Über die Struktur eines von Windows erstellten Threads sind zwar zahlreiche Informationen verfügbar, Jeffrey Richter's Erweiterte Windows-Programmierunga @book eine der Quellen ist, kann ich beispielsweise keine Literatur finden, die sich mit der internen Struktur eines .NET-Threads befasst.

One argumentiert möglicherweise, dass diese Informationen im .NET-Quellcode verfügbar sind, der jetzt öffentlich verfügbar ist, oder mit einem Disassembler wie Reflector oder IL Spy, aber ich sehe nichts, das den Thread Control Block (TCB) und darstellt Programmzähler (PC) und Stapelzeiger (SP) oder die Warteschlange des Threads oder die Liste der Warteschlangen, in denen der Thread derzeit Mitglied im @ iThread Klasse.

Wo kann ich darüber lesen? Erwähnt die Dokumentation etwas davon? Ich habe alle von @ gelesdiese Seiten aus dem MSDN aber sie scheinen es nicht zu erwähnen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage