2010-03-15 16 views
7

¿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

2

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.

+0

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

+0

@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

+0

@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

0

Cada hilo tiene su propia pila, pero todos los hilos comparten el montón.

1

La pila pertenece al contexto del subproceso. El montón pertenece al proceso, por lo tanto, se comparte entre los hilos.

1

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.