Java 프로세스와 스레드 이해하기

Single Ko·2024년 8월 6일
0

reactive-programing

목록 보기
1/8

프로세스란 무엇인가?

프로세스는 컴퓨터 프로그램이 실행되는 인스턴스입니다. 각 프로세스는 다음과 같은 리소스를 포함합니다:

  • 코드: 실행할 명령어 집합
  • 데이터: 프로그램이 처리하는 정보
  • 메모리: 코드와 데이터를 저장할 공간
  • 소켓: 네트워크 통신을 위한 인터페이스

프로세스는 무겁습니다. 즉, 생성하고 삭제하는 데 비용이 많이 듭니다.

스레드란 무엇인가?

스레드는 프로세스의 일부로, 실행 단위를 의미합니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이 스레드들은 메모리를 공유합니다.

프로세스와 스레드의 차이점

  • 프로세스: 자원의 단위, 독립적인 메모리 공간을 가짐.
  • 스레드: 실행의 단위, 같은 프로세스 내에서 메모리를 공유함.

OS 스케줄러와 컨텍스트 스위치

운영체제(OS)는 스케줄러를 통해 스레드를 CPU에 할당합니다. 만약 하나의 CPU만 있다면, 스케줄러는 여러 스레드 간에 CPU 사용 시간을 나누어줍니다. 이를 컨텍스트 스위치라고 합니다.

Java에서의 스레드

Java 스레드는 OS 스레드를 감싸는 래퍼입니다. Java 스레드는 OS 스레드와 동일하게 스케줄링되고 실행됩니다. 스레드가 실행할 메소드와 로컬 변수 등의 정보는 스택 메모리에 저장됩니다.

메모리 구조

  • 힙 메모리: 객체를 저장하는 공간. ArrayList, HashMap 등 동적으로 생성되는 객체가 저장됩니다.
  • 스택 메모리: 지역 변수와 메소드 호출 정보를 저장하는 공간. 각 스레드는 고유한 스택 메모리를 가집니다.

스레드와 CPU 자원의 효율적 사용

스레드는 CPU와 메모리를 많이 소비합니다. 특히, 네트워크 호출처럼 시간이 많이 걸리는 작업은 스레드가 유휴 상태가 되어 CPU 자원을 낭비하게 됩니다. 이를 해결하기 위해 더 효율적인 메커니즘이 필요합니다.

결론

프로세스와 스레드는 컴퓨터 프로그램의 실행과 관련된 중요한 개념입니다. 프로세스는 독립적인 메모리 공간을 가진 자원의 단위이고, 스레드는 그 프로세스 내에서 실행되는 단위입니다. OS 스케줄러는 이들 스레드를 효율적으로 관리하여 CPU 자원을 최대한 활용하도록 돕습니다.

profile
공부 정리 블로그

0개의 댓글