프로세스메모리에서 실행 중인 프로그램을 말합니다.

스레드는 프로세스를 구성하는 실행의 흐름 단위를 스레드라고 말합니다. 이 스레드는 하나의 프로세스 안에 여러 개의 스레드를 가질 수 있습니다.

실행의 흐름 단위가 하나인 프로세스를 단일 스레드 프로세스라고 하는데, 한 번에 하나의 일만 처리하는 것을 뜻합니다.

하지만, 하나의 프로세스 안에 여러 개의 스레드를 가질 수 있는데, 그러면 하나의 프로세스가 한 번에 여러 일을 동시에 처리할 수 있습니다. 즉, 프로세스를 구성하는 여러 명령어를 동시에 실행할 수 있다는 의미입니다.

프로세스 안에는 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘는데, 프로세스 안에 스레드는 이를 공유합니다.

여기서, 프로세스의 자원인 file, I/O 등은 여러 쓰레드가 공유하지만, 각 쓰레드가 고유하게 가지고 있는 것은 개별적인 PC(Program Counter), SP(Stack Pointer), Registers, 스택(Stack) 등이 있습니다.

프로세스와 스레드의 차이?
프로세스는 운영체제로부터 자신만의 고유 공간과 자원을 할당받아 사용하지만 스레드는 stack 공간만 따로 할당받고 나머지 영역은 스레드 끼리 서로 공유합니다. 그래서 스레드는 stack을 제외한 나머지 영역을 공유하기 때문에 프로세스와의 통신보다 더 효율적으로 통신할 수 있습니다.

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

여러 프로세스를 동시에 실행하는 것을 멀티 프로세스, 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티 스레드라고 합니다.

멀티 스레드는 하나의 프로세스에서 스레드들은 자원을 공유하며, 나누어 처리합니다. 어떻게 보면 병렬 처리하는 멀티 프로세스는 독립된 메모리 영역이기 때문에 작업량이 많을수록 오버헤드가 발생하여 성능 저하가 발생할 수 있기 때문에 멀티 스레드가 메모리를 더 효율적으로 사용할 수 있습니다.

멀티 프로세스 환경에서는 하나의 프로세스에 문제가 생겨도 다른 프로세스에는 지장이 적거나 없지만, **멀티 스레드 환경에서는 하나의 스레드 문제가 생기면 프로세스 전체에 문제가 생길 수 있습니다. 모든 스레드는 프로세스의 자원을 공유하고, 하나의 스레드에 문제가 생기면 다른 스레드도 영향을 받기 때문입니다.

이상으로 스레드에 대해서 간단히 알아봤습니다.

참고

  • KOCW - 운영체제, 양희재 교수님
  • 혼자 공부하는 컴퓨터구조 + 운영체제
profile
꾸준함으로 성장하는 개발자 지망생

0개의 댓글