Search
🪄

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

AI custom autofill
Published
2025/03/23
Category
Programming
Tags
Computer Science
사실 코딩을 한 이래로, 프로세스니 쓰레드니 구분하거나 따로 관리하며 개발했던 적은 없는 것 같다.
현 회사에서 개발을 진행하다, 성능상 문제될 부분에 대해서 생각을 하다 문득 프로세스와 쓰레드에 대해 정리가 되어있지 않은 나를 발견하여, 이렇게 정리하게 되었다.

1. 프로세스와 스레드란?

1.1 프로세스(Process)

프로세스는 실행 중인 프로그램 그 자체이다. 각각의 프로세스는 독립된 메모리 공간을 가지며, 운영체제로부터 별도의 자원을 할당받는다. (코드 / 데이터 / 스택 / 힙)

1.1.1 정적 세그먼트

Code: 작성한 코드
Data: 전역변수, 정적변수

1.1.2 동적 세그먼트

Heap: 변수, 함수 저장, 호출 (동적인 공간)
Stack: 함수 호출시 생성되고, 함수 종료시 반환되는 임시 메모리 공간

1.1.3 특징

독립적 메모리 공간 사용
프로세스 간 데이터 공유가 어려움
독립적 실행 가능 (다른 프로세스에 영향받지 않음)

1.2 스레드(Thread)

스레드는 프로세스 내부에서 작업을 나눠 수행하는 실행단위(흐름)이다. 하나의 프로세스 안에서 여러 스레드가 동시에 실행될 수 있다.

1.2.1 특징

코드, 데이터, 파일을 공유하며 하나의 레지스터(CPU 내부의 저장장치)와 하나의 스택(레지스터 집합에 존재하는 저장장치)으로 표현
프로세스의 자원을 공유 (메모리 공유)
빠른 컨텍스트 스위칭(작업 전환) 가능
데이터 공유가 쉽지만, 동시에 관리도 복잡

1.3 멀티프로세스(Multiprocess)

멀티프로세스는 여러 개의 프로세스를 동시에 실행하는 구조. 각각의 프로세스가 독립적이기 때문에 안정성이 뛰어나지만, 메모리를 많이 사용하는 단점이 있음.

1.3.1 장점

안정성 우수 (하나가 죽어도 다른 프로세스에 영향 없음)
병렬 처리가 용이

1.3.2 단점

높은 메모리 사용량
프로세스 간 통신 비용이 높음 (IPC: Inter Process Communication)

1.3.3. 활용 사례

웹 브라우저 탭 별로 별도의 프로세스 (Chrome) 크롬창을 많이 켜놓으면 안된다는 말이 진짜였어
Python의 multiprocessing 라이브러리로 병렬 작업 처리

1.4 멀티스레드(Multithread)

멀티스레드는 하나의 프로세스 내에서 여러 스레드를 생성해 동시에 작업을 수행하는 방식이다. 메모리를 적게 사용하면서 효율적으로 작업을 나눌 수 있지만, 관리가 까다롭다.

1.4.1 장점

빠른 컨텍스트 전환으로 성능 우수
메모리 자원 공유 (효율적)
데이터 공유 및 관리 용이

1.4.2 단점

안정성 저하 (하나의 스레드에서 오류가 생기면 프로세스 전체가 영향받음)
동시성 문제 발생 가능 (동기화 이슈)

1.4.3 활용 사례

웹 서버의 요청 처리 (Java Spring, Node.js Worker Threads)
UI 응답성을 높이기 위한 백그라운드 작업 처리
Ref:
최근에 외주업체로부터 기능을 이관받아 우리 시스템에 합류를 시키려다 업무 마무리 일정 때문에 진행되지 못 했는데, 어떻게 보면 해당 기능은 각각의 쓰레드가 아닌 프로세스로 관리되어야 했던 게 아닌가 싶다. 그런 의미에서 오히려 현재 구조가 더 맞아보이기도 한다. (별도의 서버; 협력업체에서 프로세스를 나눠서 관리했는지는 모르겠다 )