[CS 기초 갈고 닦기] 1. 프로세스 vs 스레드 - 쓰레드? 스레드?

khyojun·2022년 12월 8일
1

CS 기초 갈고 닦기

목록 보기
3/10
post-thumbnail

📌 쓰레드? 스레드?

스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
스레드는 프로세스의 일부인 실행 단위입니다.
(스레드, 쓰레드 두 단어가 있는데 실제로 어느 것을 사용해도 상관 없다고 한다. ㅎㅎ)

🔍 간단히?

간단히 말하면 프로세스의 실행 단위, 프로세스와 따로 다니는게 아니라 위 그림처럼 같이 가는 단위라고 보면 될 거 같다.

🔍 조금 더 더

OS에게서 할당을 받는 프로세스와 달리 스레드는 프로세스가 할당받은 자원을 이용하는 실행 단위이다.

📌 스레드의 저장공간

🔍 그림을 보며 알 수 있는 점

  • 위 그림을 보면 한 프로세스당 한 스레드가 있는 것이 아닌 여러개의 스레드로 구성이 될 수 있다.
  • 하나의 프로세스를 구성하는 스레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다.
    • Heap, Static(Data), Code를 공유한다.
  • 프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지게 되는데 실행 상태가 변할때마다 스레드 context switching을 수행하게 된다.
  • 각 스레드별로 자신만의 스택과 레지스터를 가지게 되는 것을 알 수 있다.

🔍 독립적인 Stack과 Register

그림에서 보면 Stack과 Register는 스레드마다 따로 존재한다. 왜일까?

🔍 Stack이 독립적으로 할당받은 이유

  • 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을
    저장하기 위해 사용되는 메모리 공간
  • 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것
  • 이는 독립적인 실행 흐름이 가능하게 한다.

따라서 독립적인 실행 흐름을 위한 최소 조건으로 독립된 스택을 할당한다.

🔍 Register가 독립적으로 할당받은 이유

  • PC 값은 쓰레드가 명령어의 어디까지 수행하였는지를 나타나게 된다.
  • 쓰레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당한다.
  • 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있다.

따라서 PC 레지스터를 독립적으로 할당한다.

🔍 스레드의 장점

  • 스레드는 프로세스보다 생성 및 종료시간, 전환시간이 짧다.(경량이라는 이름을 붙이는 이유)
  • 프로세스의 메모리, 자원등을 공유하므로 커널의 도움없이 상호간에 통신이 가능하다.

🔍 경량화 프로세스?

프로세스에 대한걸 보다보면 경량 프로세스, 중량 프로세스 라는 말들이 있는데 이때까지는 뭐 프로세스의 일부라고 생각했었는데 스레드가 경량 프로세스였다!

🔍 경량이라는 말을 사용하는 이유

경량이라는 말은 다른 것에 비해서 가볍다는 의미인데 스레드의 장점에서 보면 프로세스보다 생성, 종료 시간 등등 다른 것들이 가볍다는 면에 있어서 경량이라는 말을 사용한다.

결론

이게 자료들을 살펴보니 스레드는 오히려 프로세스의 일부로서 서로 공유가 가능한 정도에 대해서만 개념적으로 정의가 되어있고 더 세세한 부분은 오히려 프로세스 vs 스레드를 하는 부분에서 글을 작성해나가는 것이 좋다는 생각이 많이 들었다. 그래서 다음글에서 최종적으로 정리하고 외전 느낌으로 작성을 해볼까 생각이 든다.
결국 스레드는 프로세스 내에서 실행되는 흐름의 단위 라고 생각하면 편할 거 같다.

출처

profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글