Computer Science/Programming

[Programming] Process & Thread

by Donghwan 2021. 9. 29.

프로세스(Process)의 메모리 구조

프로세스란?

프로그램은 하드디스크 같은 저장장치에 보관되어 있고 폰노이만 구조에서 프로그램이 실행된다는 것은 해당 코드가 메모리에 올라와서 작업이 진행된다는 의미입니다. 프로그램은 저장장치에 저장되어 있는 정적인 상태이고, 프로세스는 실행을 위해 메모리에 올라온 동적인 상태입니다. 쉽게 말해, 프로세스란 실행중인 프로그램입니다.

하나의 CPU 즉 프로세서 한 순간 하나의 프로세스만 실행할 수 있습니다. 하지만 우리는 동시에 여러 프로그램을 사용합니다. 이것은 운영체제가 엄청나게 빠르게 CPU가 실행할 프로세스를 교체하고 있기 때문에 동시에 실행되는 것이 아니라 동시에 실행되는 것처럼 보이는 것입니다.

프로세스의 특징

  • 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 (실행중인 프로그램)
  • 메모리에 올라와 있는 프로그램의 인스턴스 (독립적인 개체)
  • 운영체제로부터 프로세스는 각각 독립된 메모리 영역을 할당받습니다.
  • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있습니다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 다른 프로세스의 변수나 자료구조에 접근할 수 없습니다.
  • 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication) 이용합니다.

 


스레드(Thread)의 메모리 구조

스레드란?

운영체제 입장에서의 작업 단위는 프로세스이고 CPU 입장에서의 작업 단위는 스레드인 것입니다. 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위로 프로세스의 처리속도를 높이기 위해 하나의 프로세스가 수행해야 할 여러 작업들을 나누어 수행할 수 있도록 설계된 프로세스 내에서 실행되는 여러 흐름의 단위입니다. 프로세스 내에서 Stack만 따로 할당을 받고 Code, Data, Heap 영역을 공유합니다. 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있고 그것을 메인 스레드라고 합니다. 

 

스레드의 특징

  • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있습니다.
  • 스레드 간의 별도의 통신이 필요하지 않습니다.
  • Light Weight Process라고도 합니다.
  • 메모리를 공유하여 시스템 자원 소모가 줄어들어 응답 시간 단축됩니다.
  • 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향 받습니다.
  • 공유된 데이터를 서로 사용하다가 충돌이 일어날 가능성이 큽니다 -> 동기화(Sychronization) 문제
  • 디버깅이 다소 까다로워집니다.
  • 스레드를 많이 생성하면, 문맥 교환이 많이 일어나서 성능 저하가 일어날 수 있습니다.
문맥 교환(context switching)
컴퓨터에서 동시에 처리할 수 있는 최대 작업 수는 CPU의 코어(core) 수와 같습니다. 만약 CPU의 코어 수보다 더 많은 작업이 실행되면, 각 코어가 정해진 시간 동안 여러 작업을 번갈아가며 수행하게 됩니다. 이때 각 작업이 서로 교체될 때 작업 간의 문맥 교환(context switching)이라는 것이 발생합니다.

여기서 작업이란 작업의 단위를 의미합니다. 작업을 상대적인 크기순으로 나열하면 job>task>operation이고, 이를 프로세스와 스레드의 관계에 대입하면 처리(job)>프로세스(task)>스레드(operation)가 되는데 문맥 교환에서는 문맥의 기준이라고 할 수 있습니다. 작업 단위의 크기는 처리 방식에 따라 다릅니다.


문맥 교환이란 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업을 가리킵니다. 이러한 문맥 교환에 걸리는 시간이 커지면 커질수록, 멀티 작업(멀티 의 효율은 저하됩니다. 오히려 많은 양의 단순한 계산은 싱글 스레드로 동작하는 것이 더 효율적일 수 있습니다.

따라서 많은 수의 스레드를 실행하는 것이 언제나 좋은 성능을 보이는 것은 아니라는 점을 유의해야 합니다.

 

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

멀티 스레드 일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행하게 됩니다. 하지만 멀티 스레드란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미합니다. 또한, 멀티 프로세스는 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미합니다.

멀티 스레드와 멀티 프로세스 모두 여러 흐름을 동시에 수행하다는 공통점을 가지고 있습니다. 멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 별도로 실행되지만, 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다는 점이 다릅니다. 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적습니다. 또한, 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아집니다.

 

 


참고자료

 

728x90
반응형

댓글