2010-03-15 12 views
7

In che modo viene allocata la memoria in caso di spawning di un nuovo thread, cioè in che modo l'heap di memoria, lo stack di memoria e i thread sono correlati? So che questo è fondamentale (concetto di framework .net) ma in qualche modo non sono molto consapevole di questo concetto.Threading heap and stack

risposta

2

È davvero difficile rispondere a questa domanda a causa del modo in cui vengono implementati i thread .Net. Non esiste necessariamente un'implementazione 1-1 tra thread nativi gestiti e corrispondenti. CLR è libero di utilizzare più thread nativi per implementare un singolo thread gestito. Quindi allocare un nuovo thread gestito non causa necessariamente la generazione di un thread nativo. Può semplicemente assumere uno esistente.

Puoi dirci perché questo ti preoccupa? Forse questo ci porterà a una risposta migliore.

+0

Penso che l'implementazione CLR di ms windows di thread sia molto simile a nativa. Si prega di specificare l'esempio in cui avviene la mappatura non 1-1. – Andrey

+0

@Andrey questo purtroppo non è il caso. Considerare l'aggiunta di Thread.ManagedThreadId in 2.0. Questa proprietà è stata aggiunta precisamente allo scopo di distinguere i thread gestiti dai loro potentiamente molti sostenitori nativi. – JaredPar

+0

@Andrey (cont) quando il thread gestito è uno STA Non credo che il CLR possa o cambierà il thread nativo dato che gli oggetti COM creati avranno affinità di thread con il thread nativo. Ma nel MTA non c'è alcun problema di affinità e il CLR può cambiare liberamente il thread nativo di supporto. – JaredPar

0

Ogni thread ha il proprio stack, ma tutti i thread condividono l'heap.

1

Lo stack appartiene al contesto del thread. L'heap appartiene al processo, quindi viene condiviso tra i thread.

1

È fondamentale molto più profondo di .net. I thread sono oggetti nativi del sistema operativo. Quello che viene chiamato Managed Thread è semplicemente wrapper attorno al thread nativo.

Quindi torna alla tua domanda. L'heap di memoria è condiviso tra i thread dello stesso processo perché si trovano in un singolo spazio di memoria virtuale. Le pile sono individuali.