[꼼꼼한 개발자] 꼼코더

11. 스프링 입문을 위한 자바 객체 지향의 원리와 이해 - [자바와 절차적/구조적 프로그래밍] - 멀티 스레드 / 멀티 프로세스의 이해 본문

Spring/스프링 입문을 위한 자바 객체 지향의 원리와 이해

11. 스프링 입문을 위한 자바 객체 지향의 원리와 이해 - [자바와 절차적/구조적 프로그래밍] - 멀티 스레드 / 멀티 프로세스의 이해

꼼코더 2022. 12. 27. 02:07
반응형

👀 멀티 스레드(Multi Thread)

  • 멀티 스레드의 T 메모리 모델은 스택 영역을 스레드 개수만큼 분할해서 쓰는 것이다.
  • 멀티 스레드는 하나의 T 메모리만 사용하는데 스택 영역만 분할해서 사용하는 구조이다.
  • 멀티 스레드는 하나의 스레드에서 다른 스레드의 스택 영역에는 접근할 수 없지만 스태틱 영역과 힙 영역은 공유해서 사용하는 구조이다. 따라서 멀티 프로레스 대비 메모리를 적게 사용할 수 있는 구조이다.

👀 멀티 프로세스(Multi Process)

  • 멀티 프로세스는 다수의 데이터 저장 영역, 즉 다수의 T 메모리를 갖는 구조다.
  • 멀티 프로세스는 각 프로세스 마다 각자의 T 메모리가 있고 각자 공유의 공간이므로 서로 참조할 수 없다.
  • 멀티 프로세스는 하나의 프로세스가 다른 프로레스의 T 메모리 영역을 절대 침범할 수 없는 메모리 안전한 구조이지만 메모리 사용량은 그만큼 크다.
  • 따라서 멀티 프로레스 대비 메모리를 적게 사용할 수 있는 구조이다.

 

자바 웹 프로그래밍을 공부했다면.

“서블릿은 요청당 프로레스가 아닌 요청당 스레드를 생성한다.”를 알 것이다.

 

이제는 요청당 스레드(Servler)가 요청당 프로세스(CGI) 보다 왜 더 효율적인지 이해할 수 있을 것이다.


 

🔎 멀티 스레드에서 전역 변수 사용의 문제점

  • 두개의 스레드로 구성된 프로그램이 있다.
  • 스레드 1이 공유 영역(스태틱과 힙)에 있는 전역 변수에 A에 10을 할당했다.
  • 그런데 CPU 사용권이 스레드 2로 넘어가고 스레드 2가 전역 변수 A에 20을 할당하고 다시 CPU 사용권이 스레드 1로 넘어가서 A의 값을 출력해 보면 어떻게 될까?
  • 스레드 1의 입장에서는 갑자기 20이라는 값이 출력되는 문제가 발생한다.

 

이러한 이유 때문에 전역 변수를 사용하게 되면 안정성이 깨진다고 표현한다.

물론 보완 방법으로는 락(Lock)을 거는 방법이 있지만 이 순간 멀티 스레드의 장점을 버린 것과 같다.


👨🏻‍💻 멀티 스레드 예제

멀티 스레드는 웹 프로그래밍에서 참 열심히 쓰는 기술이다.

따라서 아래 예제를 보면서 낭패의 사례를 알아보도록 하자.

 

실행 결과를 보면 깜짝 놀라게 될 것이다.

혹시 놀라지 않았다면 16번째 줄의 sleep() 메서드의 인자값을 100000 이상 인으로 변경하고 재실행해 보자.

 

 

💁🏻‍♂️결과

값이 2줄씩 동시에 딜레이 되어 일정한 간격(sleep()에 인자 값 만틈)으로 출력된다.

> 1 3(쉬고)…2 4(쉬고)…


🔎 툴을 (STS 또는 Eclipse) 이용해 T 메모리 영역 엿보기

  • 코드 영역 왼쪽에 원하는 숫자 줄을 더블 클릭하면 브레이크 포인트가 걸린다.(파란 원 표시)
  • 코드영역 마우스 우클릭 → Debug As → Java Application 클릭
  • F5(Step into)를 누를 때마다 한 줄씩 순차적으로 실행하면서 스택 프레임의 변화를 확인할 수 있다.

 

💁🏻‍♂️ 결과

좌측하단 브레이크에 멈춰있는 것이 확인된다.

스택 메모리 현황, 스택 프레임 현황 정보가 화면 상단에 나타난다.

좌측 상단 : 스택 메모리 현황

우측 상단 : 스택 프레임 내부의 지역 변수 현황

 

 

 

 

위 내용은 스프링 입문을 위한 자바 객체 지향의 원리와 이해 교재를 참고하여 작성되었습니다.

 

스프링 입문을 위한 자바 객체 지향의 원리와 이해 - YES24

자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량 애플리케이션 프레임워크인 스프링은 자바와 객체 지향이라는 기반 위에 굳건히 세워져 있다. 따라서 스프링을 제대로 이해하고 활용

www.yes24.com

 

 

 

 

 

Comments