프로세스와 쓰레드

프로세스

  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위

  • 각각 독립된 메모리 영역(Code, Data, Stack, Heap 구조)을 할당받는다.

  • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.

  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.

  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 한다. (Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)

쓰레드

  • 프로세스 내에서 실행되는 여러 흐름의 단위

  • 쓰레드는 프로세스 내에서 Stack을 따로 할당받고 Code, Data, Heap 영역은 공유한다.

  • 쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행된다

  • 각각의 쓰레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.

  • 한 쓰레드가 프로세스 자원을 변경하면, 다른 이웃 쓰레드도 그 변경 결과를 즉시 볼 수 있다.

  • 쓰레드 간의 자원 공유는 전역 변수(데이터 세그먼트)를 이용하므로 함께 사용할 때 충돌이 발생할 수 있다.

멀티 프로세싱

멀티 프로세싱은 2개 이상의 CPU가 병렬적으로 작업하는 다중처리기 시스템에서 사용할 수 있는 방법으로, 여러 개의 CPU가 하나의 주기억장치를 공유하여 각각의 작업을 동시에 수행하게 된다.

멀티 쓰레딩

컴퓨터는 여러 개의 쓰레드를 효과적으로 실행할 수 있는 하드웨어 지원을 갖추고 있다. 그러므로 멀티쓰레딩은 프로그램 안에서 병렬 처리의 이점을 맛볼 수 있다.

멀티 쓰레딩의 장점

  1. 응답성: 대화형 프로그램을 멀티쓰레드화하면, 프로그램의 일부분(쓰레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어, 사용자에 대한 응답성이 증가된다. 예를 들어, 멀티 쓰레드가 적용된 웹 브라우저 프로그램에서 하나의 쓰레드가 이미지 파일을 로드하고 있는 동안, 다른 쓰레드에 사용자와의 상호 작용이 가능하다.
  2. 자원 공유: 쓰레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 코드 공유의 이점은, 한 응용 프로그램이 같은 주소 공간 내에 여러 개의 다른 활동성 쓰레드를 가질 수 있다는 점이다.
  3. 경제성: 프로세스 생성에 메모리와 자원을 할당하는 것은 비용이 많이 든다. 쓰레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 쓰레드를 생성하고 문맥교환을 하는 편이 보다 경제적이다.
  4. 멀티프로세서 활용: 멀티 프로세서 구조에서는 각각의 쓰레드가 다른 프로세서에서 병렬로 수행될 수 있다. 단일 쓰레드 프로세스는 CPU가 많아도 CPU 한개에서만 실행된다. 즉, 다중 쓰레드화를 하면 다중 CPU에서 병렬성이 증가된다. 

멀티 쓰레딩의 단점

  • 다중 쓰레드는 캐시나 변환 색인 버퍼와 같은 하드웨어 리소스를 공유할 때 서로를 간섭할 수 있다.
  • 하나의 쓰레드만 실행 중인 경우 싱글 쓰레드의 실행 시간이 개선되지 않고 오히려 지연될 수 있다.
  • 멀티쓰레딩의 하드웨어 지원을 위해 응용 프로그램과 운영 체제 둘 다 충분한 변화가 필요하다.
  • 쓰레드 스케줄링은 멀티쓰레딩의 주요 문제이기도 하다.

멀티쓰레드 모델

  • 다-대-일(Many-to-One)
  • 일-대-일(One-to-One)
  • 다-대-다(Many-to-Many)

멀티 프로세싱과 멀티 쓰레딩 차이

  • 멀티 쓰레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만, 오류로 인해 하나의 쓰레드가 종료되면 전체 쓰레드가 종료될 수 있다는 점과 동기화 문제를 안고 있다.

  • 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 쓰레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 존재한다.

  • 멀티 프로세스로 실행되는 작업을 멀티 쓰레드로 실행할 경우프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 효율적으로 관리할  있다또한프로세스 간의 통신보다 쓰레드 간의 통신 비용이 적으므로 부담이 줄어들게 되므로 쓰레드로 나눠가면서 사용한다.

댓글