[Java] 프로세스와 쓰레드

김세림·2024년 4월 30일

Java

목록 보기
21/24
post-thumbnail

프로세스와 쓰레드


프로세스

프로세스란?

  • 운영체제(OS)로부터 자원을 할당받는 작업의 단위 (카카오톡, 크롬 등등)
  • 실행중인 프로그램을 의미한다.

프로세스의 작업 단위

  • 예를 들어 자바프로그램을 실행시키면 이 프로그램은 프로세스라는 이름으로 운영체제 위에서 실행된다.
  • 즉, OS위에서 실행되는 모든 프로그램은 OS가 만들어준 프로세스에서 실행된다고 보면된다.
    (만약 크롬 브라우저를 2개 띄우면 크롬 브라우저 프로세스도 2개인 것)

프로세스 구조

Code, Data, 메모리 영역 3가지로 분류된다.

  1. Code : Java main 메소드와 같은 코드

  2. Data : 프로그램이 실행 중 저장할 수 있는 저장공간

  3. Memory(메모리 영역)

    • 메모리 영역은 2가지로 구분된다. (Stack, Heap)
    • Stack : 지역변수, 매개변수, 리턴변수를 저장하는 공간
    • Heap : 프로그램이 동적으로 필요한 변수를 저장하는 공간
      (new(), mallock())

쓰레드

쓰레드(thread)란?

프로세스내에서 일하는 일꾼(코드실행의 흐름)

쓰레드 생성

프로세스가 작업중인 프로그램에서 실행요청이 들어오면 쓰레드(일꾼)을 만들어 명령어를 처리하도록 한다.

쓰레드의 자원 관리

프로세스 안에는 쓰레드가 여러개 있고, 그 쓰레드들은 실행을 위한 프로세스 내 주소공간이나 메모리공간(Heap)을 공유받는다.
또 추가로, 본인이 각각 명령처리를 위한 자신만의 메모리공간(Stack)도 할당받는다.

Java 쓰레드

위에 말한 일반 쓰레드와 동일하며, JVM 프로세스 안에서 실행되는 쓰레드를 말한다.

  • Java 프로그램을 실행하면 JVM 프로세스 위에서 실행된다.
  • Java 프로그램 쓰레드는 Java Main 쓰레드부터 실행되며 JVM에 의해 실행된다.

멀티 쓰레드

우리가 지금까지 했던 예제들은 다 싱글쓰레드이다.
main메서드 하나만 실행시켰기 때문이다!(main() 메서드의 쓰레드)
JVM은 메인쓰레드가 종료되면 JVM도 같이 종료된다.

멀티쓰레드란?

프로세스 안에서 여러개의 쓰레드가 병렬적으로(동시다발적으로) 실행되는 것을 말한다.

  • 하나의 프로세스는 여러개의 실행단위(쓰레드)를 가질수 있고, 이 쓰레드들은 프로세스의 자원을 공유한다.
  • Java 프로그램은 메인 쓰레드 외에 다른 작업 쓰레드들을 생성하여 여러 개의 실행 흐름을 만들 수 있다.

멀티쓰레드의 장점 😆

  • 여러개의 작업을 동시에 할 수 있어서 성능이 좋아진다.
  • 스택을 제외한 모든 영역에서 메모리를 공유하기 때문에 자원을 보다 효율적으로 사용할 수 있다.
  • 응답 쓰레드와 작업 쓰레드를 분리하여 빠르게 응답을 줄 수 있다.(비동기)

멀티쓰레드의 단점 ☹️

  • 프로세스의 자원을 공유하면서 작업을 처리하기 때문에 자원을 서로 사용하려 하는 충돌이 발생할 수 있다. (동기화 문제 / 싱크가 안맞다)
  • 둘 이상의 쓰레드가 서로의 자원을 원하는 상태가 되었을 때 서로의 작업이 종료되기만을 무한히 기다리며 더이상 작업을 진행하지 못하게 되는 상태가 생길 수 있다.(교착상태 / 데드락)

0개의 댓글