앞써 설명한 자바의 메모리 구조에서
T메모리 구조(스태틱영역, 스택영역, 힙영역으로 구성되는 것을 그냥 T메모리 구조라고 부름)에 대해서 설명했다.
스레드란 무엇인가?
스레드는 스택영역을 스레드의 개수만큼 분할하는 것이다.
또한 각각의 스레드는 다시 스태틱영역, 스택영역, 힙영역을 가지게 된다.
스택영역이 분할되므로 스레드 간의 스택영역을 침범 할 수는 없지만
큰 측면에서 봤을 때 결국 자바 메모리의 스태틱영역과 힙영역은 공유 할 수 있다!
멀티프로세스 vs 멀티스레드
멀티 프로세스(Multi Process)
하나의 프로세스가 다른 프로세스의 T메모리 영역을 절대 침범 할 수 없는 메모리로써 안전한 구조이지만, 그만큼 메모리 사용량을 크다!
멀티 스레드(Multi Thread)
스택영역이 분할되어 하나의 스레드에서 다른 스레드로 접근 할 수는 없지만 스태틱 영역과 힙 영역은 공유해서 사용 할 수 있다. 따라서 멀티 프로세스 대비 메모리를 적게 사용 할 수 있는 구조이다.
서버 프로그래밍에서 Servlet은 요청 당 스레드를 생성한다고 들어봤다
** Servlet 과 CGI??
요청 당 스레드를 생성 => Servlet
요청 당 프로세스 생성 => CGI
OS시간에도 배웠지만
스레드가 Critical Section을 접근하는 것에 대한 문제를 해결해야 한다.
다음과 같은 문제가 있다.
스레드1 | 스레드2 |
|
전역변수 A에 10 할당 |
| 전역변수 A는 10을 저장 |
| 전역 변수 A에 20할당 | 전역변수 A는 20을 저장 |
전역변수 A의 값 출력 |
| 전역변수 A는 20을 출력 |
스레드1이 A에 분명 10을 할당했는데, 후에 바로 스레드2가 20을 할당해버리므로
예상치 못한 결과를 얻어낸다.
이러한 공유 자원을 관리하는 자바만의 방법이 있는지 알아보고 후에 글을 적겠다.
'JAVA' 카테고리의 다른 글
자바가 확장한 객체지향 (0) | 2015.06.30 |
---|---|
자바와 객체지향 (0) | 2015.06.30 |
자바 메모리 구조 >>> 2 (0) | 2015.06.30 |
자바 메모리 구조>>1 (0) | 2015.06.30 |
GC - Garbage Collection 이란? (0) | 2015.06.30 |