gloryyam 님의 블로그

프로세스와 스레드 본문

Backend/Java

프로세스와 스레드

gloryyam 2024. 8. 29. 10:09

 
이 글은 깅영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 강의를 보고 정리한 글입니다. 
https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B3%A0%EA%B8%89-1/dashboard
 

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 강의 | 김영한 - 인프런

김영한 | 멀티스레드와 동시성을 기초부터 실무 레벨까지 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다?

www.inflearn.com

프로세스란?

  • 프로그램은 하드 디스크와 같은 보조 기억장치에 저장되어 있습니다. 이때 아직 실행되기 전까지는 단순히 파일에 불과합니다. 
  • 프로그램을 실행하면 프로세스가 만들어지고 프로그램이 실행됩니다. 
  • 이렇게 운영체제 안에서 실행중인 프로그램을 프로세스라 합니다. 
  • 프로세스는 실행 중인 프로그램의 인스턴스입니다. 
  • 자바 언어로 비유를 하자면 클래스는 프로그램이고, 인스턴스는 프로세스입니다.

특징

  • 프로세스는 실행 중인 프로그램의 인스턴스이다.
  • 각 프로세스는 독립적인 메모리 공간을 갖고 있고, 운영체제에서 별 도의 작업 단위로 분리해서 관리된다.
  • 각 프로세스는 별도의 메모리 공간을 갖고 있기 때문에 서로 간섭하지 않는다.
  • 그리고 프로세스가 서로의 메모리에 직접 접근할 수 없다.
  • 프로세스는 이렇듯 서로 격리되어 관리되기 때문에, 하나의 프 로세스가 충돌해도 다른 프로세스에는 영향을 미치지 않는다.
  • 쉽게 이야기해서 특정 프로세스(프로그램)에 심각한 문제 가 발생하면 해당 프로세스만 종료되고, 다른 프로세스에 영향을 주지 않는다.

 

프로세스의 메모리 구성 

  • 코드 섹션: 실행할 프로그램의 코드가 저장되는 부분 
  • 데이터 섹션 : 전역 변수 및 정적 변수가 저장되는 부분(그림에서 기타에 포함)
  • 힙( Heep ) : 동적으로 할당되는 메모리 영역
  • 스택 ( Stack ) : 메서드 호출 시 생성되는 지역 변수와 반환 주소가 저장되는 영역(스레드에 포함)

 

스레드란?

프로세스는 하나 이상의 스레드를 반드시 포함한다.

스레드는 프로세스 내에서 실행되는 작업 단위입니다. 한 프로세스 내에서 여러 스레드가 존재할 수 있고, 이들은 프로세스가 제공하는 동일한 메모리를 공간을 공유합니다. 스레드는 프로세스보다 단순하므로 생성 및 관리가 단순하고 가볍습니다.!

 

메모리 구성

  • 공유 메모리 : 같은 프로세스의 코드 섹션, 데이터 섹션, 힙(메모리)은 프로세스 안의 모든 스레드가 공유합니다.
  • 개별 스택 : 각 스레드는 자신의 스택을 갖고 있습니다.

 

스레드는 프로세스 내에서 실행되는 작업의 단위입니다. 한 프로세스 내에 하나의 스레드가 존재할 수 있고, 한 프로세스 내에 여러 스레드가 존재할 수도 있습니다. 그리고 스레드는 프로세스가 제공하는 동일한 메모리 공간을 공유합니다.

 

  • 단일 스레드 : 한 프로세스 내에 하나의 스레드만 존재 
  • 멀티 스레드 : 한 프로세스 내에 여러 스레드가 존재

하나의 프로세스 안에는 최소 하나의 스레드가 존재해야 합니다. 그래야 프로그램이 실행될 수 있습니다.

참고로 지금까지 작성한 자바 코드들은 모두 한 프로세스 내에서 하나의 스레드만 사용하는 단일 스레드였습니다.

정리하면 프로세스는 실행 환경과 자원을 제공하는 컨테이너 역할을 하고, 스레드는 CPU를 사용해서 코드를 하나하나 실행합니다.

 

멀티스레드가 필요한 이유 

하나의 프로그램도 그 안에서 동시에 여러 작업이 필요합니다.

  • 워드 프로그램으로 문서를 편집하면서, 문서가 자동으로 저장되고, 맞춤법 검사도 함께 수행된다.
  • 유튜브는 영상을 보는 동안, 댓글도 달 수 있다.

운영제체 관점에서 보면 다음과 같이 구분할 수 있다.

  • 워드 프로그램 - 프로세스 A 
    • 스레드1 : 문서 편집 
    • 스레드2 : 자동 저장 
    • 스레드3 : 맞춤법 검사 
  • 유트브 - 프로세스 B 
    • 스레드1 : 영상재생 
    • 스레드2 : 댓글 작성

 

'Backend > Java' 카테고리의 다른 글

멀티태스킹과 멀티프로세싱  (1) 2024.08.28
[Thread] run() vs start()  (0) 2024.08.27