¿Cómo se asigna la memoria en caso de generar un nuevo hilo, es decir, cómo están relacionados el montón de memoria, la pila de memoria y los subprocesos? Sé que esto es fundamental (concepto de marco .net) pero de alguna manera no soy muy consciente de este concepto.Threading Heap and Stack
Respuesta
Es realmente difícil responder a esta pregunta debido a la forma en que se implementan los hilos .Net. No hay necesariamente una implementación 1-1 entre los hilos nativos gestionados y los correspondientes. El CLR es libre de usar múltiples hilos nativos para implementar un solo hilo administrado. Por lo tanto, la asignación de un nuevo subproceso administrado no necesariamente genera un subproceso nativo. Puede asumir simplemente una existente.
¿Puede decirnos por qué esto le preocupa? Tal vez eso nos lleve a una mejor respuesta.
Cada hilo tiene su propia pila, pero todos los hilos comparten el montón.
La pila pertenece al contexto del subproceso. El montón pertenece al proceso, por lo tanto, se comparte entre los hilos.
Es fundamental mucho más profundo que .net. Los hilos son objetos nativos del sistema operativo. Lo que se denomina Hilo Administrado es solo envoltorio alrededor del hilo nativo.
Volviendo a su pregunta. El montón de memoria se comparte entre subprocesos del mismo proceso porque están ubicados en un único espacio de memoria virtual. Las pilas son individuales.
- 1. JVM - Heap and Stack
- 2. Try/Catch and threading
- 3. ObservableCollection and threading
- 4. WCF Service and Threading
- 5. Observable Stack and Queue
- 6. C# structs/classes stack/heap control?
- 7. Heap vs Stack vs Perm Space
- 8. Dirección de Stack y Heap en C++
- 9. Stack and Queue, ¿Por qué?
- 10. .NET Threading Model and Application.DoEvents vs. Thread.Sleep
- 11. Service stack and Mocking, any tutorials?
- 12. ¿Qué va a RAM, Harddrive, Stack y Heap en C++?
- 13. ¿Gestión de memoria global en C++ en stack o heap?
- 14. Stack Stack
- 15. Identificación de si una dirección pertenece a heap o stack o registra
- 16. ¿Cómo puedo ver objetos dentro de Heap & Stack en C# .Net
- 17. Python Threading Concept Pregunta
- 18. Multi Threading
- 19. erlang call stack
- 20. NSOperation y CoreData Threading
- 21. C# Threading & Blocking
- 22. Android Understanding Heap Sizes
- 23. High Frequency Heap
- 24. Android Heap memory increase
- 25. Applet: Java heap space
- 26. problemas de memoria Heap
- 27. C++ Heap Corruption
- 28. PriorityQueue/Heap Update
- 29. Android Heap Fragmentation Strategy?
- 30. AppDomains y GC Heap
Creo que ms windows CLR implementación de hilos es muy similar a la nativa. Por favor, especifique el ejemplo en el que tiene lugar el mapeo no 1-1. – Andrey
@Andrey lamentablemente este no es el caso. Considere la posibilidad de agregar Thread.ManagedThreadId en 2.0. Esta propiedad fue agregada precisamente con el propósito de distinguir los hilos gestionados de sus potenciales patrocinadores nativos. – JaredPar
@Andrey (cont) cuando el subproceso administrado es un STA. No creo que el CLR pueda o cambie el subproceso nativo ya que los objetos COM creados tendrían afinidad de subprocesos con el subproceso nativo. Pero en el MTA no hay problemas de afinidad y el CLR puede cambiar libremente el hilo nativo de respaldo. – JaredPar