💡 개요
오늘은 프로세스와 스레드를 비교하며 정리해 보자.
🛠️ 프로세스
프로세스란, 컴퓨터에 설치된 프로그램이 운영체제로부터 자원을 할당받아 실행되는 작업 단위를 말한다.
예를 들어, 내 맥북에 설치된 디스코드를 실행하면, 이 디스코드는 하나의 프로세스로 동작하게 된다.
⚙️ 프로세스간 통신
프로세스는 서로의 메모리 공간에 접근할 수 없기 때문에, 통신을 위해선 IPC(Inter-Process Communication) 기술이 필요하다.
대표적인 IPC 기술에는 메시지 큐, 공유 메모리, 파이프 등이 있다.
이러한 기술들은 모두 커널을 활용하는데, 그 이유는 커널 영역은 항상 주 메모리에 상주하고, 모든 프로세스가 접근 가능한 공용 공간이기 때문이다.
IPC를 통해 여러 프로세스 간의 협업이 가능해지며, 복잡한 프로그램 구성에 매우 유용하다.
🛠️ 스레드
스레드는 프로세스 내부의 실행 흐름 단위이다.
따라서 하나의 프로세스에는 최소 한 개 이상의 스레드가 존재하며, 일반적으로 메인 스레드가 기본적으로 함께 생성된다.
이는 프로세스가 실제로 동작하려면 실행 흐름이 반드시 필요하기 때문이다.
스레드의 가장 큰 특징은 같은 프로세스 내에서 코드, 데이터, 힙 영역을 공유한다는 점이다.
하지만 스택 영역은 스레드마다 독립적으로 할당되기 때문에, 각 스레드는 자신만의 실행 흐름과 로컬 데이터를 가지며 독립적으로 동작할 수 있다.
⚙️ 스레드간 통신
스레드는 힙 영역을 포함한 대부분의 메모리 공간을 공유하기 때문에, 별도의 통신 기법 없이도 데이터를 주고받을 수 있다.
하지만 그만큼 동기화 문제나 데이터 충돌이 발생할 수 있어, 이를 방지하기 위해 락, 세마포어, 뮤텍스 등의 동기화 도구가 사용된다.
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.04.14 - 스레드 로컬 (Thread Local) (0) | 2025.04.14 |
---|---|
[개발 일기] 2025.04.13 - CQRS (0) | 2025.04.13 |
[개발 일기] 2025.04.11 - String vs StringBuffer vs StringBuilder (1) | 2025.04.11 |
[개발 일기] 2025.04.10 - Spring Security Filter (0) | 2025.04.10 |
[개발 일기] 2025.04.09 - 정형 데이터 vs 비정형 데이터 (1) | 2025.04.09 |