Conceptualmente, ¿qué significa cuando se dice que cada hilo tiene su propia pila?

10

He estado leyendo Java Concurrency in Practice de Brian Goetz y dentro de la sección Confinamiento de pila se menciona que cada subproceso tiene su propia pila y, por lo tanto, las variables locales están intrínsecamente limitadas al subproceso en ejecución; existen en la pila de subprocesos en ejecución, que no es accesible para otros subprocesos. ¿Qué quiere decir que cada hilo tiene su propia pila de ejecución?

Friki
fuente
44
Para una comprensión más profunda de esto, busque el registro del puntero de la pila y cómo se usa en el ensamblaje. Esto explicará cómo los hilos pueden tener fácilmente su propia pila.
Peter Smith
1
De acuerdo con Peter Smith. Puede tomar tiempo, pero luego obtienes un conocimiento perfecto de qué, cómo y por qué está sucediendo
superM

Respuestas:

13

¿Sabe cuándo interrumpe el depurador por cualquier razón, y el IDE le da un seguimiento de la pila? ¿Y cada método (marco de pila) tiene su propio conjunto de variables locales que puede examinar en el depurador?

Esa es la "pila de ejecución" de su programa. Muestra cómo se ve el estado local de su programa en este momento. Lo que dice el autor es que cada hilo obtiene su propia pila de ejecución distinta de esa manera. Tiene su propia pila de llamadas, y cada uno de los métodos tiene sus propias variables locales.

Como las variables se almacenan como parte de la pila de ejecución y no en el montón, son exclusivas del subproceso que se está ejecutando y no se pueden compartir directamente. Sin embargo, puede copiarlos o pasar referencias a objetos a otros hilos de varias maneras, por lo que es principalmente una distinción académica.

Mason Wheeler
fuente
Agregue un énfasis aún más fuerte a su tercer párrafo para indicar que las variables locales que están expuestas a otros hilos u objetos de larga duración ya no estarán confinadas. Por lo tanto, la afirmación citada del libro de OP es muy dudosa.
rwong
44
@rwong: Es imposible exponer una variable local a otro hilo de una manera que podría ser problemática. Las variables solo contienen primitivas o referencias. Los objetos viven en el montón.
Michael Borgwardt
@MichaelBorgwardt Tomemos dos casos por separado, digamos que la variable contiene una primitiva que es el caso A y que la variable contiene una referencia que es el caso B. Como las primitivas se pasan por valor, las variables locales son seguras para subprocesos, pero ¿qué pasa con las referencias? Se pueden pasar? ¿Por qué dices que es imposible?
Geek
2
@ Geek: Debido a que la variable y el objeto al que hace referencia son dos cosas separadas y diferentes que no deben confundirse cuando se habla a este nivel de detalle. Una variable local no puede exponerse a un hilo diferente. Los objetos ciertamente pueden.
Michael Borgwardt
@ MichaelBorgwardt Veo lo que estás diciendo. Gracias por la aclaración.
Geek