Process vs Thread

한강섭·2025년 4월 5일
0
post-thumbnail

썸네일 출처


흐름


Program

프로그램이란, 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말한다.

-> 아직 실행되지 않은 파일 그 자체 (.exe 파일, .dmg 파일 등)


Process

이 Program을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가고 동적 상태가 된다. 이 상태를 Process 라고 한다!


Thread

과거에는 프로그램을 실행할 때 실행 시작부터 실행 끝까지 프로세스 하나만을 이용해서 진행했다고 한다.

하지만 시간이 흐를수록 프로그램이 복잡해지고 많은 작업을 처리해야 했다.

프로세스를 여러개 만들까?

운영체제는 안정성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근시키기 때문에 안됨...

프로세스와는 다른 더 작은 실행 단위 개념이 필요하게 되었고, 이것이 바로 Thread이다.


구체적인 특징


Process

  1. 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
  2. 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
  3. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
  4. 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
    Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html


Thread

  1. 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
  2. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
  3. 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
    각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  4. 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html


Java Thread

  1. 일반 스레드와 거의 차이가 없으며, JVM가 운영체제의 역할을 한다.
  2. 자바에는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다.
  3. 자바에서 스레드 스케줄링은 전적으로 JVM에 의해 이루어진다.
  4. 아래와 같은 스레드와 관련된 많은 정보들도 JVM이 관리한다.

즉, 개발자는 자바 스레드로 작동할 스레드 코드를 작성하고, 스레드 코드가 생명을 가지고 실행을 시작하도록 JVM에 요청하는 일 뿐이다.


결론

쓰레드는 프로세스 안에 포함되어 있는 개념!

프로세스는 운영체제에게 Code/Data/Stack/Heap 메모리 영역을 할당받는다.

쓰레드는 그 안에서 Stack을 제외한 다른 메모리 영역을 다른 쓰레드와 공유한다.

프로세스는 독립적이어서 다른 프로세스와 정보 공유가 번거롭다

하지만 쓰레드는 메모리를 공유하고 있기 때문에 정보 공유가 쉽다


참고자료

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4#%EA%B2%B0%EB%A1%A0

https://somaz.tistory.com/265

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

profile
개발😊

0개의 댓글