CS/운영체제

스레드?

Geisha 2025. 1. 11. 22:43

 

스레드는 현대 소프트웨어 개발에서 필수적인 도구이자 개념이다.
병렬 처리, 성능 최적화, 문제 해결 능력을 갖추기 위해서는
스레드가 어떻게 생성되고, 관리되며, 종료되는지를 명확히 이해해야 한다.
이는 멀티코어 환경에서 효율적이고 안정적인 프로그램을 개발하는 데 핵심적인 역할을 하며,
개발자로서의 역량을 높이는 데 필수적인 요소가 되었다.

스레드를 이해하고 활용하는 것은 단순히 코드를 작성하는 것을 넘어,
시스템의 동작 원리를 파악하고 최적화하는 데 있어 중요한 첫걸음이기에
개발자가 목표라면 스레드를 알아야 한다.


스레드

스레드(Thread)프로세스 내에서 실행되는 가장 작은 단위로, 프로세스의 실행 흐름을 담당합니다. 한 프로세스는 하나 이상의 스레드를 가질 수 있으며, 스레드들은 같은 프로세스메모리 자원(코드, 데이터, 파일 등)을 공유한다.

 

스레드의 중요성

스레드는 프로세스 내에서 실행 흐름을 분리하여 다양한 작업을 동시에 처리할 수 있게 한다.

  • 예를 들어, 사용자가 프로그램에서 텍스트를 입력하는 동시에 데이터 저장, 네트워크 통신, 그래픽 렌더링이 이루어질 수 있다.
  • 이러한 병렬 처리는 사용자 경험을 개선하고, 시스템의 성능을 극대화한다.

또한, 스레드는 프로세스 자원을 공유하므로, 여러 프로세스 간의 통신보다 훨씬 빠르고 효율적이다. 그러나 자원 공유는 동기화 문제와 같은 새로운 도전을 가져오며, 이를 해결하기 위해 개발자는 스레드의 작동 방식을 깊이 이해해야 한다.

 

동기화문제?

- 여러 스레드나 프로세스가 공유 자원에 동시에 접근하거나 수정할 때 발생하는 문제

 


 

스레드의 구성요소

스레드는 다음과 같은 요소로 구성된다.

  1. 스택(Stack)
    각 스레드는 독립적인 스택을 가지고 있으며, 함수 호출과 지역 변수를 저장한다.
  2. 프로그램 카운터(Program Counter)
    현재 실행 중인 명령어의 위치를 저장한다.
  3. 레지스터(Registers)
    스레드 실행 중 필요한 임시 데이터를 저장한다.
  4. 공유 자원
    같은 프로세스의 다른 스레드와 코드, 데이터, 파일 등 자원을 공유한다.

멀티 프로세스  VS 멀티 스레드

 

  • 멀티프로세스
    • 여러 프로세스가 독립적으로 실행됩니다.
    • 각 프로세스는 독립적인 메모리 공간을 가지며, 서로 데이터를 주고받으려면 IPC(Inter-Process Communication) 같은 방법이 필요합니다.
    • 예) 크롬 브라우저의 각 탭은 독립된 프로세스로 실행됨.
  • 멀티스레드
    • 하나의 프로세스 내에서 여러 스레드가 실행됩니다.
    • 스레드 간에는 프로세스의 자원(코드, 데이터 등)을 공유하기 때문에 메모리 공간을 효율적으로 사용할 수 있습니다.
    • 자원 공유로 인해 스레드 간 통신이 빠르지만, 동기화 문제가 발생할 수 있습니다.
    • 예) 워드 프로세서에서 텍스트 입력, 자동 저장, 맞춤법 검사 등 여러 작업을 동시에 수행.

 

 

 

멀티 & 단일 스레드 프로세스

  1. 단일 스레드 프로세스
    하나의 스레드만 실행 흐름을 가지는 프로세스입니다.
    예) 간단한 명령행 프로그램.
  2. 멀티스레드 프로세스
    여러 개의 스레드가 하나의 프로세스 안에서 동작합니다.
    • 스레드 간의 작업을 분리하여 병렬적으로 수행할 수 있습니다.
    • 같은 자원을 공유하므로 메모리 사용량이 적고, 프로세스 간 통신보다 속도가 빠릅니다.
      예) 웹 브라우저(탭별로 스레드가 실행), 게임 프로그램(그래픽 처리와 사용자 입력 처리).