1 분 소요

Process and Thread

프로세스(Process)와 스레드(Tread)는 운영체제에서 프로그램을 실행하기 위해 사용되는 개념으로, 둘 다 실행 중인 코드의 실행 흐름을 나타낸다는 공통점이 있다. 하지만 다음과 같은 차이점이 존재한다.

프로세스(Process)

  • 프로세스는 운영체제로부터 자원(I/O, 파일, 주소 공간 등)을 할당받은 실행 중인 프로그램이다.
  • 각각의 프로세스는 독립된 메모리 영역을 가지고 있고, 그 각각의 프로세스는 서로 완전히 분리가 되어 있어 다른 프로세스의 자원에 직접 접근할 수 없다.
  • 프로세스는 운영체제로부터 할당받은 자원을 이용하여 동작하고, 이러한 자원은 각 프로세스마다 독립적으로 할당되기 때문에 한 프로세스에서 다른 프로세스의 자원을 직접적으로 접근할 수 없다.
  • 프로세스 간 통신(Inter Process Communication, IPC)을 통해 서로 데이터를 주고 받을 수 있다.

스레드(Thread)

  • 스레드는 프로세스 안에서 실행되는 여러 흐름의 단위이다.
  • 프로세스의 자원(I/O, 파일, 주소 공간 등)을 공유하여 사용할 수 있으며, 스레드 간의 통신은 프로세스의 자원을 이용하여 이루어진다.
  • 각각의 스레드는 스택을 비롯해 독립적인 실행 환경을 갖고 있지만, 프로세스 내의 메모리 공간은 서로 공유한다.
  • 스레드는 프로세스 내에서 서로 다른 실행 흐름을 가질 수 있으므로, 다수의 작업을 동시에 처리할 수 있다.
  • 하나의 프로세스 내에서 실행되는 스레드들은 해당 프로세스의 자원을 공유하므로, 자원 공유와 스레드 간의 동기화 문제 등 다양하고 복잡한 문제가 발생할 수 있다.

차이점

요약하자면, 아래와 같이 정리 할 수 있다.

  • 프로세스
    • 독립적인 실행 단위
    • 각각의 프로세스는 서로 완전히 분리되어 서로의 자원에 직접 접근 불가
  • 스레드
    • 하나의 프로세스 내에서 서로 다른 실행 흐름을 가질 수 있는 실행 단위
    • 프로세스의 자원을 공유하여 사용

참고 사이트

  • https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Thread.html

  • https://mangkyu.tistory.com/92

업데이트: