본문 바로가기

CS

[CS] 프로세스와 스레드

프로그램(Program)

  • 어떤 작업을 위해 실행할 수 있는 파일, 단순히 기억장치에 저장된 수동적인 개체

프로세스(Process) 

  • 실행 중인 프로그램, 프로그램이 주기억장치에 적재되어 처리를 시작할 때 프로세스가 된다.
  • 다음에 실행할 명령어를 지정하는 프로그램 카운터(PC)를 가진 능동적 개체

  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
    기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.

스레드(Thread)

프로세스의 한계

  • 과거에는 프로그램을 실행할 때 프로세스 하나만을 사용했었는데, 기술의 발전으로 프로그램이 복잡해짐으로서 프로세스 하나만으로는 프로그램을 실행시키는데 한계가 있었다.
  • 동일한 프로그램을 여러 개의 프로세스로 만들게 되면, 그만큼 메모리를 차지하고 CPU에서 할당받는 자원이 중복되게 될 것이다.
  • 스레드(Thread)는 이러한 프로세스 특성의 한계를 해결하기 위해 탄생 하였다.

스레드의 개념

  • 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위 를 말한다.
  • 스레드 수가 많을 수록 프로그램 성능도 좋아진다.
  • 하나의 프로그램은 하나 이상의 프로세스를 갖고 있고
    하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.

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

 

참조

완전히 정복하는 프로세스 vs 스레드 개념

[OS] 프로세스와 스레드의 차이

'CS' 카테고리의 다른 글

[CS] 소프트웨어 개발 방법론  (0) 2023.04.19
[CS] 보안 문제점  (0) 2023.04.19
[CS] 자주 사용하는 알고리즘과 자료구조  (0) 2023.04.18
[CS] REST / RESTful API  (0) 2023.04.17
[CS] HTTP / HTTPS  (0) 2023.04.17