※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.
📚 스프링 입문을 위한 자바 객체지향의 원리와 이해
T 메모리 -> TIL : 다시 보는 main() 메서드: 메서드 스택 프레임 참고
하나의 T 메모리만 사용한다.
스택 영역만 분할 하여 사용한다.
하나의 T 메모리의 스택 영역을 분할하여 사용하기 때문에 메모리 사용이 적다.
스태틱 영역과 힙 영역은 공유한다.
각 프로세스마다 각자의 고유 공간을 가지고 있다.
서로 참조할 수 없다.
다수의 T 메모리를 사용하므로 메모리 사용량이 크다.
서블릿(Servlet)은 요청당 프로세스가 아닌 요청당 스레드를 생성 !!
① 스레드1이 공유 영역(스태틱과 힙)에 있는 전역 변수 A에 10을 할당
② CPU 사용권이 스레드2로 넘어감
③ 스레드2가 전역 변수 A에 20을 할당
④ CPU 사용권이 스레드1로 넘어가서 A값을 출력
😟 스레드1 입장에서 갑자기 20이라는 값이 출력되는 문제가 발생 ❕❕😟
👉 TIL : 전역 변수와 메모리: 전역 변수 쓰지 말라니까요! 이 장에서 전역 변수를 쓰지 말라고 했었다. 쓰기 가능한 전역 변수 생성 시 스레드 안정성이 깨진다. 이를 보안하려면 락(lock)을 거는 방법이 있지만, 멀티 스레드의 장점이 감소한다.
멀티 스레드는 하나의 T 메모리의 스택 영역만 분할하여 사용
멀티 프로세스는 다수의 T 메모리 사용
멀티 스레드 사용시 전역 변수를 사용할 경우 문제가 있을수 있음!