IT 도서 리뷰/개발자가 되기 위해 꼭 알아야 하는 IT 용어

[PART5] 운영체제/시스템/보안 - TERMS 02

goldenkiwi-coder 2025. 6. 1. 04:57

[ TERMS 02 ]  프로세스/스레드

프로세스와 스레드의 차이를 설명하는 이미지(출처 : https://dev.to/mounira_say_13e6315265220/popular-interview-question-what-is-the-difference-between-process-and-thread--4098)

 

1. 프로세스(Process)/스레드(Thread)의 정의

  • 프로세스 : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 
  • 스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위

 

2. 프로세스/스레드 어디서 접하게 될까?

  컴퓨터의 작업관리자를 실행하면 무수히 많은 프로세스가 실행되고 있는 모습을 볼 수 있다. 컴퓨터 작업을 하는 동안 프로세스, 스레드와 항상 함께하고 있는 것이다. 빠르고 안정적인 프로그램을 만들기 위해서는 프로세스와 스레드가 효율적으로, 오류 없이 일을 처리해야한다. 따라서 개발자가 프로그래밍을 할 때는 자신의 코드가 프로세스 단위에서 실행되어야 하는지, 스레드 단위에서 실행되어야 하는지 구분하고 코드의 동작 방식을 정확히 이해할 필요가 있다.

 

3. 프로세스/스레드 알아보기

>  프로세스

  • 프로세스란?

 오늘날의 운영체제를 가리켜 '멀티 프로세스 운영체제'라고 부른다. 프로세스는 실행 중에 있는 프로그램을 의미한다. 예를들어 특정 프로그램을 실행하기 위해서 실행 파일을 더블 클릭하면 그 순간 프로그램 실행을 위해 메모리 할당이 이루어진다. 그리고 이 메모리 공간으로 바이너리 코드가 올라간다. 이 순간부터 프로그램은 '프로세스'라고 불리게 된다.

 

  • 프로세스의 스케줄링

 대부분의 사람들은 여러 프로그램을 동시에 사용한다. 하지만 컴퓨터가 하나의 명령을 수행하기 위해서 CPU를 점유하고 있으면 다른 작업은 실행될 수 없다. 

 다중 프로그램 실행의 비밀은 간단하다. 하나의 CPU가 여러 개의 프로세스를 번갈아가며 실행하는 것이 비결이다. CPU는 아주 빠르기 때문에 하나의 CPU가 여러 프로세스를 번갈아 실행해도 사용자는 전혀 눈치를 채지 못한다. 결국 동시에 여러 개의 프로그램이 실행되는 것처럼 보이는 이유는 여러 개의 프로세스가 CPU 할당 시간을 나누기 때문이다. 이렇게 동시에 여러 프로세스를 처리하는 형태를 멀티 프로세스라고 한다. 그리고 프로세스의 CPU 할당 순서 및 방법을 결정짓는 것을 스케줄링 이라고 한다.

프로세스 스케줄링을 설명하는 이미지 (출처 : https://cdn1.byjus.com/wp-content/uploads/2022/08/process-scheduling-in-operating-system-2.png)

 

>  스레드

  • 컨텍스트 스위칭(context switching)

 멀티 프로세스는 컨텍스트 스위칭을 필요로 한다. 컨텍스트 스위칭은 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정을 의미한다. 실행 중인 프로세스가 변경되면 CPU 내에 존재하는 데이터도 함께 변경되어야 한다.  예를 들어 프로세스 A가 진행중에 있다가 프로세스 B가 진행되어야 하는 상황이라면 A의 작업 내용들은 메모리에 저장되어야 하고 B의 실행을 위해 메모리에서 B관련 내용들을 멈췄던 부분에서 가져와야 한다.

컨텍스트 스위칭을 설명하는 이미지 (출처 : https://www.geeksforgeeks.org/difference-between-swapping-and-context-switching/)

 

  • 컨텍스트 스위칭을 줄이는 새로운 대안, 스레드

 많은 수의 프로세스 생성은 빈번한 컨텍스트 스위칭으로 이어진다. 컨텍스트 스위칭의 빈도수는 초당 수 십 회 이상이다. 빈번한 컨텍스트 스위칭은 성능 저하의 원인이 된다. 멀티 프로세스는 사용자에게 편의를 주지만, 두 가지 이상의 일을 동시에 처리하기 위해 추가적으로 프로세스를 생성하는 작업은 상당히 부담스러운 일이다.

 빈번하게 발생하는 컨텍스트 스위칭에 소요되는 시간을 줄여 성능을 향상시키 기 위해 스레드가 탄생했다. 프로세스는 완전히 독립된 두 개의 프로그램 실행을 위해 사용된다. 그러나 스레드는 하나의 프로그램 내에서 둘 이상의 흐름을 만들어 내기 위해 디자인되었다. 프로세스와 달리 스레드 간에는 공유하는 상태 정보들이 있다. 이것이 컨텍스트 스위칭을 빠르게 한다.

  1. 스레드는하나의 프로그램 내에서 여러 개의 실행 흐름을두는 모델이다.
  2. 스레드는 프로세스처럼 완벽히 독립적인 구조가 아니라 스레드들 사이에 공유하는 요소들이 있다
  3. 스레드는 컨텍스트 스위칭 에 걸리는 시간이 프로세스보다 짧다.

 

>  프로세스와 스레드의 메모리 구조

 스레드는 상태 정보를 어떻게 공유하는지 메모리 구조 관점으로 알아보겠다. 하나의 프로세스 내에서 두 개의 자식 프로세스를 생성했을 때의 상황을 가정하였을 때 , 자식 프로세스가 생성되고 나면 부모 프로세 스와 독립적으로 움직인다. 각 프로세스 메모리 구조에서 서로 아무런 관계가 없다.

 반면 하나의 프로세스 내에서 두 개의 스레드를 생성했을 때, 해당 스레드만을 위한 스택을 생성할뿐 그 이외의 영역은 부모프로세스 영역을 공유하게 된다. 즉, 스택 영역을 제외한 메모리 영역을 공유하기 때문에 컨텍스트스위칭 비용을 줄일수 있다.

 

멀티 스레드 방식의 주의점

 동시에 처리해야 할 일을 스레드로 구현하면 메모리 공간과 자원 소모를 줄일 수 있으나 동일한 자원에 접근하는 일이 발생할 수 있다. 그 결과, 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료 구조에 접근하여 엉뚱한 값을 읽어 오거나 수정할 수 있습니다. 따라서 개발자들이 구현한 코드 중에 공유되는 메모리 자원이 한 번에 한 스레드만 실행 되도록 보호하는 장치가 필요하다. 이를 ‘동기화’라고 한다.

 

4. 프로세스/스레드를 사용하는 이유

 프로세스는 메모리에 올라와 실행되는 프로그램이다. 스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이다. 스레드는 많은 프로세스 생성 으로 인한 컨텍스트 스위칭의 대안으로 사용된다.

 

5. 프로세스/스레드 더 알아보기

함께알아 두면좋은 용어

  • 운영체제
  • CPU
  • 세마포어
  • 뮤텍스