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
È 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.
Ogni thread ha il proprio stack, ma tutti i thread condividono l'heap.
Lo stack appartiene al contesto del thread. L'heap appartiene al processo, quindi viene condiviso tra i thread.
È 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.
- 1. JVM - Heap and Stack
- 2. ObservableCollection and threading
- 3. Try/Catch and threading
- 4. È nello stack o heap?
- 5. Stack C++ vs allocazione heap
- 6. Valgrind dice "allocazione stack", dico "allocazione heap"
- 7. Stack e heap nel linguaggio di programmazione
- 8. Perché c'è uno stack e un heap?
- 9. Assemblaggio di Windows heap e stack?
- 10. contenitori STL nello stack e heap
- 11. Istanziazione array C - Assegnazione stack o heap?
- 12. Ottimizzazione dell'allocazione di memoria: da heap a stack
- 13. Campi di classe, sono memorizzati nello stack o heap?
- 14. Destinazione di allocazione di std :: aligned_storage (stack o heap?)
- 15. Creazione di array di oggetti sullo stack e heap
- 16. L'array java inizializzato va su stack o heap?
- 17. Gestione della memoria globale in C++ in stack o heap?
- 18. Dove viene creato l'oggetto thread? Stack o Heap?
- 19. Cosa va in RAM, Harddrive, Stack e Heap in C++?
- 20. Dove sono collocati più stack e heap nella memoria virtuale?
- 21. Python Threading Concept Domanda
- 22. L'heap è effettivamente un heap?
- 23. Threading, Copiato, Errore, SetTextCallback
- 24. Threading NSOperation e CoreData
- 25. Python Threading eccezione non gestita
- 26. C++ Allocazione della memoria sull'heap e stack?
- 27. membro Const impilare vs heap
- 28. Passaggio da multiprocessing a threading
- 29. Dove sono memorizzate le variabili in una chiusura: stack o heap?
- 30. Qual è lo scopo di ciascuna delle posizioni di memoria, stack, heap, ecc.? (perso in tecnicismi)
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
@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
@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