[JAVA]프로세스, 쓰레드 (1)

yoon·2023년 12월 11일
0

java

목록 보기
12/19
post-thumbnail

✅ 프로세스(Process)

운영체제로부터 자원을 할당받는 자원의 단위

✔ 프로세스 구조

OS가 프로그램 실행을 위한 프로세스를 할당해줄 때 프로세스 안에 code, data, memory(heap,stack)을 함께 할당해준다.

  • code : Java main 메소드와 같은 코드
  • data : 프로그램 실행 중 저장할 수 있는 저장공간
        ( 전역변수, 정적변수, 배열 등 초기화된 데이터를 저장하는 공간)
  • memory
    • Stack : 지역변수, 매개변수, 리턴변수를 저장하는 공간
    • Heap : 프로그램이 동적으로 필요한 변수를 저장하는 공간 new

✅ 쓰레드(Thread)

프로세스가 할당받은 자원을 이용하는 실행의 단위

✔ 쓰레드 생성

프로세스가 작업중인 프로그램에서 실행 요청이 들어오면 쓰레드를 만들어 명령을 처리

✔ 쓰레드 자원

프로세스 안에 있는 메모리 공간(Heap)을 공유받고, 자신만의 메모리 공간(Stack)도 할당받는다.

✔ 자바의 쓰레드

일반 쓰레드와 동일하며, JVM 프로세스 안에서 실행되는 쓰레드를 말한다.
Java 프로그램 쓰레드는 Java Main 쓰레드부터 실행되며, JVM에 의해 실행된다.

- 싱글 쓰레드

프로세스 안에서 하나의 쓰레드만 실행되는 것
→ Java 프로그램의 경우 main() 메서드만 실행시켰을 때 (메인 쓰레드)

- 멀티 쓰레드

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

  • 장점
    • 여러 개의 작업을 동시에 할 수 있어서 성능 up
    • 스택을 제외한 모든 영역에서 메모리를 공유하기 때문에 자원 효율적 사용
    • 응답 쓰레드와 작업 쓰레드를 분리하여 빠른 응답 가능 (비동기)
  • 단점
    - 동기화 문제 발생
    - 교착 상태 발생
    - 둘 이상의 쓰레드가 서로의 자원을 원해 서로 작업의 끝을 기다리는 상태

    context switching : 쓰레드 간의 작업 전환
    멀티 쓰레드로 작업을 하면 동시에 작업하는 것 처럼 보이지만, 매우 빠른 속도로 번갈아 작업이 이루어진다.
    이 시간때문에 두 개의 쓰레드로 작업한 시간이 싱글 쓰레드로 작업한 시간보다 더 걸리게 된다.
    만약 싱글 코어에서 단순히 CPU만을 사용하는 작업이라면 싱글 쓰레드로 프로그래밍하는 것이 더 효율적이다.

    🔺 쓰레드의 작업 순서는 매번 달라질 수 있다.
       JVM의 쓰레드 스케줄러에 의해서 작업 순서가 결정되는 데 프로세스의 작업 순서는 OS의 스케줄러에 의해 결정되기 때문이다.
       JAVA가 OS 독립적이라고 하지만 OS 종속적인 부분이 존재하는데 그 중 하나가 쓰레드이다.

✔ I/O blocking

두 쓰레드가 서로 다른 자원을 사용하는 작업의 경우에는 싱글 쓰레드 프로세스보다 멀티쓰레드 프로세스가 더 효율적이다.

예를 들어 사용자의 입력이 필요한 경우 싱글 쓰레드라면 입력을 기다리는 동안 다른 작업을 할 수 없다. 그러나 멀티쓰레드라면 입력을 기다리는 동안 다른 쓰레드가 작업을 할 수 있다.

쓰레드가 입출력(I/O) 처리를 위해 기다리는 것을 I/O blocking 이라고 한다.

profile
하루하루 차근차근🌱

0개의 댓글