2010-03-15 4 views
7

Wie Speicher zugeordnet wird im Falle eines neuen Threads, d. H. Wie Speicher Heap, Speicher-Stack und Threads verwandt sind? Ich weiß, dass dies grundlegend ist (.net Framework-Konzept), aber irgendwie ist mir dieses Konzept nicht sehr bewusst.Threading-Heap und Stack

Antwort

2

Es ist wirklich schwierig, diese Frage zu beantworten, weil .NET-Threads implementiert sind. Es gibt nicht unbedingt eine 1-1-Implementierung zwischen verwalteten und entsprechenden nativen Threads. Die CLR kann mehrere native Threads verwenden, um einen einzelnen verwalteten Thread zu implementieren. Das Zuweisen eines neuen verwalteten Threads führt nicht unbedingt dazu, dass ein nativer Thread generiert wird. Es kann einfach von einem bestehenden ausgehen.

Können Sie uns sagen, warum dies für Sie von Interesse ist? Vielleicht führt uns das zu einer besseren Antwort.

+0

Ich denke, ms Windows CLR-Implementierung von Threads ist sehr nah an nativen. Bitte geben Sie ein Beispiel an, in dem eine Nicht-1-1-Zuordnung stattfindet. – Andrey

+0

@Andrey das ist leider nicht der Fall. Betrachten Sie das Hinzufügen von Thread.ManagedThreadId in 2.0. Diese Eigenschaft wurde genau zu dem Zweck hinzugefügt, verwaltete Threads von ihren potentiell vielen nativen Backern zu unterscheiden. – JaredPar

+0

@Andrey (cont) Wenn der verwaltete Thread eine STA ist Ich glaube nicht, dass die CLR den nativen Thread ändern kann oder wird, da die erstellten COM-Objekte eine Thread-Affinität zum nativen Thread haben. Aber in der MTA gibt es kein Affinitätsproblem, und die CLR kann den nativen Hintergrund der Sicherung frei ändern. – JaredPar

0

Jeder Thread hat seinen eigenen Stack, aber alle Threads teilen sich den Heap.

1

Der Stapel gehört zum Thread-Kontext. Der Heap gehört zu dem Prozess, er wird daher zwischen den Threads geteilt.

1

Es ist grundlegend viel tiefer als .net. Threads sind systemeigene Objekte. Was als verwalteter Thread bezeichnet wird, ist nur ein Wrapper um nativen Thread.

Also zurück zu Ihrer Frage. Der Speicher-Heap wird über Threads desselben Prozesses gemeinsam genutzt, da sie sich in einem einzigen virtuellen Speicherbereich befinden. Stacks sind individuell.