1 minute read

‘혼자 공부하는 컴퓨터구조+운영체제 - 강민철’ 책을 참고하여 작성한 포스트입니다.

스레드(thread)는 프로세스를 구성하는 실행의 흐름 단위이다. 하나의 프로세스는 여러 스레드를 가질 수 있다. 스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있다.



프로세스와 스레드

  • 하나의 실행 흐름을 가지고 한 번에 하나의 부분만 실행되는 프로세스를 단일 스레드 프로세스 라고 한다. ‘실행의 흐름 단위가 하나’라고 볼 수 있다.
  • 스레드의 개념이 도입되며 하나의 스레드에서 동시에 여러 명령어를 처리할 수 있게 되었고, 멀티 스레드 프로세스 라고 한다. 이런 점에서 볼 때 스레드를 ‘프로세스를 구성하는 실행 단위’ 라고 본다.
  • 스레드는 프로세스 내에서 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구성된다.
  • 핵심은 스레드들은 실행에 필요한 최소한의 정보(위의 구성요소들)만을 유지한 채 프로세스 자원을 공유하며 실행되는 점이다.
  • 실제 많은 운영체제는 CPU에 처리할 작업을 전달할 때 프로세스가 아닌 스레드 단위로 전달한다.
  • 스레드는 프로세스 자원을 공유한 채 실행에 필요한 최소한의 정보만으로 실행된다.



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

  • 여러 프로세스를 동시에 실행하는 것을 멀티프로세스(multiprocess), 여러 스레드를 동시에 실행하는 것을 멀티스레드(multithread) 라고 한다.

멀티스레드의 장점

  • 스레드들은 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택을 제외한 프로세스가 가지고 있는 자원을 공유한다. 즉, 여러 프로세스를 병행 실행하는 것보다 메모리를 더 효율적으로 사용할 수 있다.
  • 또한 프로세스의 자원을 공유하기 때문에 협력과 통신에 유리하다.

멀티스레드의 단점

  • 프로세스의 자원을 공유하므로 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있다.
  • 멀티프로세스 환경에서는 하나의 프로세스에 문제가 생겨도 다른 프로세스에는 지장이 적거나 없다.

프로세스 간의 자원을 공유하고 데이터를 주고 받는 것을 프로세스 간 통신(IPC, inter-process communication) 이라고 한다.
메모리에 프로세스들이 서로 공유하는 영역인 공유 메모리(shared memory) 를 두어 데이터를 주고받는 방법이 있다.

c++로 스레드를 다루는 예제 - 혼공컴운 깃헙

스레드는 프로세스 내의 실행 흐름 단위이다.

Leave a comment