Thread(스레드)

프로세스를 구성하는 실행의 흐름 단위로, 하나의 프로세스 내에 여러 개의 스레드가 존재할 수 있다.

프로세스 vs 스레드

-프로세스스레드

정의

메모리에 올라와 실행되고 있는 프로그램의 인스턴스

프로세스 내에서 할당받은 자원을 이용해 동작하는 실행 단위

메모리

운영체제로부터 독립된 메모리 영역 할당(다른 프로세스의 자원에 접근 X)

프로세스 내에서 Stack만 따로 할당 받고, Code/Data/Heap 영역은 공유

통신

IPC(Inter-Process Communication)를 통해 프로세스 간 통신

프로세스 내의 자원을 공유하면서 통신

관계

프로세스는 최소 하나 이상의 스레드를 가지고 있음

스레드는 하나의 프로세스 내에 존재하고 프로세스가 할당 받은 자원을 이용하여 실행

이전에는 하나의 프로세스는 하나의 실행 흐름을 가지고 있었지만, 스레드가 도입되면서 하나의 프로세스 내에서 여러 개의 실행 흐름을 가질 수 있게 되었다.

  • 싱글 스레드 프로세스: 하나의 프로세스에서 하나의 실행 흐름을 가져, 한 번에 하나의 일만 처리 가능

  • 멀티 스레드 프로세스: 하나의 프로세스에서 여러 개의 실행 흐름을 가지고, 한 번에 여러 일을 처리 가능

스레드는 프로세스 내에서 각디 다른 실행 흐름을 가질 수 있는데, 이는 스레드마다 아래의 정보들을 독립적인 값들로 가지고 있기 때문이다.

  • 스레드 ID

  • 프로그램 카운터 값을 비롯한 레지스터 값

  • 스택

반면에, 프로세스 자원은 프로세스 내의 모든 스레드가 공유하기 때문에, 프로세스 내의 스레드들은 프로세스 내의 자원을 공유하면서 실행 흐름을 가질 수 있다.

단일 스레드로 여러 프로세스 실행 vs 하나의 프로세스로 여러 스레드 실행

단일 스레드로 여러 프로세스를 실행하는 것과 하나의 프로세스로 여러 스레드를 실행하는 것에는 프로세스내 자원 공유라는 큰 차이점이 존재한다.

  • 단일 스레드로 여러 프로세스 실행

    • 프로세스를 fork하여 같은 작업을 하는 프로세스를 여러 개 생성하여, 코드 영역/데이터 영역/힙 영역 등 모든 자원이 복제되어 생성되어 자원 낭비 발생

    • 서로 자원을 공유하지 않아 프로세스 간 통신(IPC)을 통해 자원 공유

  • 하나의 프로세스로 여러 스레드 실행

    • 코드 영역/데이터 영역/힙 영역 등 서로 자원을 공유하여 메모리 낭비 및 자원 낭비가 발생하지 않음

    • 하나의 스레드에서 문제가 발생하는 경우 프로세스 내 전체 스레드에 영향을 미침

참고자료

Last updated