Thread (1)

김재익·2023년 6월 19일
0

JAVA

목록 보기
9/18
post-thumbnail

프로세스와 쓰레드

프로세스

  • 실행 중인 프로그램을 의미한다.
  • OS위에 프로그램을 실행시키면 프로세스라는 이름으로 실행되는 것이다.
  • 세 프로그램 모두 각각의 프로세스로 실행되며
    크롬 브라우저를 2개 띄우면 크롬브라우저 프로세스도 2개가 띄워진 것이다.

프로세스 구조

OS가 프로그램 실행을 위한 프로세스를 할당해줄때 프로세스안에 프로그램 Code와 Data 그리고 메모리 영역(Stack, Heap)을 함께 할당해준다.

  • Code는 Java main 메소드와 같은 코드를 말한다.
  • Data는 프로그램이 실행중 저장할 수 있는 저장공간을 의미한다.
  • Memory
    • Stack : 지역변수, 매개변수, 리턴변수를 저장하는 공간
    • Heap : 프로그램이 동적으로 필요한 변수를 저장하는 공간 (new(), mallock())

쓰레드

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

쓰레드의 생성

  • 프로세스가 작업중인 프로그램에서 실행요청이 들어오면 쓰레드(일꾼)을 만들어 명령을 처리하도록 한다.
  • 즉, 프로세스가 만들어지면서 생성하는것이 아닌 업무 요청이 왔을 때 생성하고 일을 끝내면 삭제되는 것이다.

쓰레드의 자원

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

Java의 쓰레드

일반 쓰레드와 동일하며 JVM 프로세스 안에서 실행되는 쓰레드

  • java 프로그램 쓰레드는 Java Main 쓰레드부터 실행되며 JVM에 의해 실행된다.

멀티 쓰레드

<-> 싱글 쓰레드

자바는 메인 쓰레드가 main() 메서드를 실행시키면서 시작이 된다.

  • 메인 쓰레드는 필요에 따라서 작업 쓰레드들을 생성해서 병렬로 코드를 실행 시킬 수 있다.
  • 즉, 자바는 멀티 쓰레드를 지원한다.

싱글 쓰레드

프로세스 안에서 하나의 쓰레드만 실행되는 것이다.

  • Java 프로그램의 경우 main() 메서드만 실행시켰을 때 이것을 싱글 쓰레드라고 한다.
  • main() 메서드의 쓰레드를 메인 쓰레드라고 한다.
  • JVM의 메인 쓰레드가 종료되면 JVM도 같이 종료된다.

멀티 쓰레드

프로세스 안에서 여러개의 쓰레드가 실행되는 것이다.

  • 하나의 프로세스는 여러개의 실행단위(쓰레드)를 가질 수 있으며 이 쓰레드들은 프로세스의 자원을 공유한다.
  • Java 프로그램은 메인 쓰레드외에 다른 작업 쓰레드들을 생헝하여 여러개의 실행흐름을 만을 수 있다.
  • 장점
    • 여러 쓰레드를 통해 여러개의 작업을 동시에 할 수 있어 성능이 좋아진다.
    • Stack을 제외한 모든 영역에서 메모리를 공유하기 때문에 자원을 보다 효율적으로 사용할 수 있다.
    • 응답 쓰레드와 작업 쓰레드를 분리하여 빠르게 응답을 줄 수 있다. (비동기)
  • 단점
    • 동기화 문제가 발생할 수 있다.
      • 프로세스의 자원을 공유 하면서 작업을 처리하기 때문에 자원을 서로 사용하려고 하는 충돌이 발생하는 경우를 의미한다.
    • 교착 상태(데드락)이 발생 할 수 있다.
      • 둘 이상의 쓰레드가 서로의 자원을 원하는 상태가 되었을 때 서로 작업이 종료되기만을 기다리며 작업을 더 이상 진행하지 못하게 되는 상태를 의미한다.
profile
개발자호소인

0개의 댓글