1 분 소요

위키피다아에 따르면, 프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램, 스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위 라고 한다. 이 말만 들어서는 쉽게 이해가 되지 않는다.

프로세스

위에서 프로세스는 실행되고 있는 프로그램 이라고 말했다. “프로그램”이란 단순히 말해 코드 덩어리라고 할 수 있다. “실행” 이란 프로그램을 메모리에 올린 뒤, PCB(Process Control Block)을 생성하는 과정을 뜻한다고 할 수 있다. 즉, 프로세스란 메모리에 올라간 프로그램이다.

image

프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)를 할당받으며, 각각 독립된 주소 공간에서 실행된다. 때문에, 프로세스는 다른 프로세스의 변수 및 자료구조에 일반적인 방법으로는 접근할 수 없다. 접근이 반드시 필요할 시 프로세스 간 통신(IPC) 을 사용해야만 한다.

따라서, 실행 중 오류가 발생하여 특정 프로세스가 강제 종료된다 하더라도, 다른 프로세스에는 영향을 주지 못한다.

프로세스는 OS 관점에서의 최소 작업 단위라고 할 수 있다.

스레드

여러 작업을 한꺼번에 처리해야 하는 프로그램이 있다면, 그래서 하나의 프로세스만으론 벅차다면 어떻게 해야 할까? 위에서 언급했듯 운영체제는 안전성을 위해 프로세스 간 변수 및 자료 공유에 제약을 두고 있기 때문에, 여러 개의 프로세스를 생성해 하나의 프로그램을 수행하는 방법을 사용하기는 어렵다. 이런 문제를 해결하기 위해 만들어진 게 스레드다.

image

하나의 프로세스 내에 최소 한 개 이상의 스레드가 존재한다. 스레드는 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. 따라서 하나의 스레드가 프로세스의 자원을 변경한다면, 모든 스레드가 변경 결과를 즉시 알 수 있다.

이러한 특징 때문에, 스레드는 프로세스와 달리 하나의 스레드에서 오류가 발생한 순간 같은 프로세스 내의 모든 스레드가 영향을 받는다.

스레드는 CPU 관점에서의 최소 작업 단위라고 할 수 있다.

멀티프로세싱

멀티프로세싱이란 하나의 프로그램을 여러 개의 프로세스로 구성하여, 각 프로세스가 하나의 작업을 처리하도록 하는 것이다. 위에서 언급했듯 하나의 프로세스에 문제가 발생해도, 다른 프로세스는 영향을 받지 않는다는 장점이 있지만, Context Switching 과정에서 오버헤드가 발생하고, 프로세스 간 통신에서 IPC를 사용해야 한다는 단점이 있다.

멀티스레딩

멀티스레딩이란 하나의 프로그램을 여러 개의 스레드로 구성하여, 각 스레드가 하나의 작업을 처리하도록 하는 것이다. 하나의 스레드에서 발생한 문제가 같은 프로세스 내의 모든 스레드에게 영향을 미치며, 자원을 공유하기 때문에 데이터가 충돌하는 문제(동기화 문제)가 발생하지만, Context Switching 과정에서 발생하는 오버헤드가 없으며, 스레드 간 데이터 교환이 간단하다는 장점이 있다. 또한 여러 프로세스로 할 수 있는 작업을 하나의 거대한 프로세스에서 여러 스레드로 나누어 수행할 수 있어, 프로세스를 생성하고 자원을 할당하는 시스템 콜이 줄어드는 효과도 기대할 수 있다.

참고:

  • https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
  • https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

태그:

카테고리:

업데이트:

댓글남기기