쓰레드(Thread)란?

이창윤·2022년 8월 3일
0

쓰레드의 개념

프로세스 내에서 실제로 작업을 수행하는 주체.

프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로


프로그램 카운터와 스택 포인터 등을 비롯한 쓰레드 실행 환경 정보와 Stack은 독립적으로 가지고 Code, Data, Heap을 다른 쓰레드와 공유한다.

  • Stack이 독립적으로 할당되는 이유: 독립적인 실행 흐름, 즉 독립적인 함수 호출을 가능하게 하기 위해

  • PC 레지스터를 독립적으로 갖는 이유: 독립적인 실행흐름이 있으므로 Context switching이 발생하기 때문에 필요하다.

프로세스: 운영체제로부터 자원을 할당받는 작업의 단위
쓰레드: 프로세스가 할당받은 자원을 이용하는 실행흐름의 단위이다.

모든 프로세스에는 최소 한 개 이상의 쓰레드가 존재하며 둘 이상을 가진 프로세스를 멀티쓰레드 프로세스라고 한다.

멀티 쓰레드

하나의 프로그램을 여러 개의 쓰레드로 구성하여 작업을 처리하도록 하는 것

  • 실제로는 한 개의 CPU 코어가 한가지 작업만 수행할 수 있기 때문에 동시에 처리되는 작업의 개수는 CPU 코어의 개수와 일치한다.

  • 짧은 시간동안 여러 작업을 번갈아가며 수행함으로써 동시에 여러 작업이 수행되는 것처럼 보이게 하는 것이다.

  • 프로세스 당 생성 가능한 쓰레드의 수는 제한되어 있지 않으나 쓰레드가 작업을 수행하는데 개별적인 메모리 공간을 필요로 하기 때문에 제한이 있다.

  • 프로세스의 성능이 단순히 쓰레드의 개수에 비례하는 것은 아니다. (오히려 더 낮은 성능을 보일 수 있다)

장점:

시스템 처리량 증가(처리 비용 감소):

  • Context switching을 할 때 공유하고 있는 메모리 만큼의 자원을 아낄 수 있다.

    Context Switching: CPU가 현재 작업중인 기존 프로세스를 중단하고 다른 프로세스를 실행하기 위해 지금까지의 상태를 저장하고 다음 프로세스의 상태를 메모리에 올리는 작업

  • 독립적인 메모리 공간 (Stack, Register)을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르고 시스템 자원 소모가 감소한다.

시스템 자원 소모 감소(자원의 효율성 증대):

  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소하여 자원의 효율적 관리 가능

  • CPU의 사용률이 향상된다.

단점:

  • 하나의 쓰레드에 문제가 발생해 공유된 자원을 잘못 건드리면 전체 프로세스가 영향을 받는다.

  • 자원을 공유하기 때문에 동기화 문제(Synchronization Issue)가 발생한다. (사용자 레벨 쓰레드의 경우 쓰레드의 스케줄링은 운영체제가 아닌 개발자가 하기 때문에 직접 동기화 문제에 대응할 수 있어야 한다)

동기화 문제: 공유 자원에 여러 쓰레드가 동시에 접근해서 데이터의 일관성을 보장하지 못하는 문제

멀티 프로세스

하나의 프로그램을 여러 개의 프로세스로 구성해 작업을 처리하도록 하는 것

장점:

  • 여러 개의 프로세스 중 하나에 문제가 발생해도 다른 프로세스까지 영향이 확산되지 않는다.

단점:

  • Context switching에서의 오버헤드가 발생한다: 독립된 메모리 영역을 할당받기 때문에 서로 공유하는 메모리가 없어서 캐시에 있는 모든 데이터를 초기화하고 다시 불러와야 하기 때문에 자원과 시간이 많이 소모된다.

  • 프로세스 간 공유된 자원이 없으므로 다소 복잡한 통신 기법 (IPC)을 필요로 한다.

출처 및 참고

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

0개의 댓글