Machineboy空

프로세스와 스레드 ③ 스레드 본문

Computer/CS

프로세스와 스레드 ③ 스레드

안녕도라 2024. 1. 12. 17:53

스레드(thread)란?

이번 내용에선 (소프트웨어) 스레드를 의미.

*스레드(thread) = 프로세스를 구성하는 실행 흐름의 단위

 

 

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


스레드(thread)의 구성 요소

스레드는 무엇으로 구성되어 있길래, 실행 흐름을 나눠서 실행할 수 있을까?

실행에 필요한 최소한의 정보를 유지하고 있다.

  • 스레드 ID
  • 프로그램 카운터를 비롯한 레지스터 값
  • 스택 등

리눅스에서는 명시적으로 스레드와 프로세스 구분하지 않는다.

 

프로세스를 이루는 스레드(thread)들은 프로세스의 자원을 공유하며 실행된다.

thread 1,2,3은 병행 실행된다고 하나, 같은 코드 영역, 데이터 영역을 공유하고 있다.

스레드 별로 다른 영역이 주어지는 것이 아니다.

 

실제로 요즘, 처리해야할 작업을 CPU에게 전달할 때 통째로 process단위가 아닌 thread 단위로 전달하는 추세

 


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

  • 동일한 작업을 수행하는 단일 스레드 프로세스 여러 개 실행
  • 하나의 프로세스를 여러 스레드로 실행

어떤 차이가 있을까?

 

프로세스끼리는 자원 공유하지 않지만 스레드끼리는 자원을 공유한다.

 

  • 프로세스를 fork하면(=복제하면) 코드/데이터/힙 영역 등 모든 자원이 (자식 프로세스로서) 복제되어 저장된다.
    • 즉, 저장된 메모리 주소를 제외하면 모든 것이 동일한 프로세스 두 개가 통째로 메모리에 적재된다.
    • fork를 세 번, 네 번 하면 메모리에 같은 프로세스가 통째로 3개, 4개 적재되는 꼴
    • *참고) fork직후 같은 프로세스를 통째로 메모리에 중복 저장하지 않으면서, 동시에 프로세스끼리 자원을 공유하지 않는 방법도 있다. 이를 쓰기 시 복사(copy on write)기법이라 한다.
     
  • 하지만 스레드들은 프로세스가 가지는 자원을 공유한다.
    • 각기 다른 스레드 ID(별도의 실행을 위해 꼭 필요한), 프로그램 카운터 값을 포함한 레지스터 값, 스택을 가질 뿐

 

 

  • 프로세스끼리는 자원을 공유하지 않는다  ‭→ 남남처럼 독립적으로 실행된다
    • 프로세스 간에도 자원을 공유할 수 있다 : 프로세스간 통신(IPC)
    • 파일을 통한 프로세스 간 통신, 공유 메모리를 통한 프로세스 간 통신
  • 스레드는 프로세스의 자원을 공유한다  ‭→ 협력과 통신에 유리하다 but 때로는 문제가 되기도 한다.