프로세스와 스레드 (Process and Thread)

컴퓨터과학·AI
한 줄 정의: 프로세스는 실행 중인 프로그램 하나하나를 담는 독립된 상자이고, 스레드는 그 상자 안에서 실제로 일을 처리하는 작업 단위입니다.

쉽게 풀면

회사 건물을 하나의 프로세스라고 생각해봅시다. 건물 안에는 사무실, 회의실, 자재 창고 같은 공용 공간(메모리, 파일 등 자원)이 있고, 이 건물 안에서 여러 직원(스레드)이 동시에 일할 수 있습니다. 직원들은 같은 건물의 자원을 공유하며 협업하기 때문에 빠르게 소통할 수 있지만, 서로 다른 건물(다른 프로세스)에 있는 직원들은 자원을 직접 공유하지 못해 문서를 주고받는 등 더 번거로운 방식으로만 소통할 수 있습니다. 즉, 프로세스는 자원을 독립적으로 소유한 실행 단위이고, 스레드는 같은 프로세스 안에서 자원을 나눠 쓰며 동시에 작업을 처리하는 단위입니다.

왜 중요한가

프로세스와 스레드의 구분은 운영체제의 자원 관리, 병렬·동시 프로그래밍, 성능 최적화 연구 전반의 기초 개념입니다. 대규모 데이터 처리나 실시간 시스템 논문에서는 작업을 어떻게 프로세스와 스레드로 나누어 CPU 자원을 효율적으로 쓸지가 시스템 성능을 좌우하는 설계 결정이기 때문에, 관련 연구에서 구조 설계의 근거로 빈번하게 다뤄집니다.

논문에서는 이렇게 쓰입니다

"본 시스템은 입력 데이터를 여러 스레드(thread)로 분할 처리함으로써 단일 프로세스(process) 내에서도 CPU 다중 코어를 효율적으로 활용하도록 설계되었다."

이 문장은 프로그램 전체를 여러 개의 독립된 프로그램으로 나누지 않고, 하나의 프로세스 안에서 여러 작업 단위(스레드)를 동시에 돌려 컴퓨터의 여러 코어를 동시에 활용했다는 뜻입니다.

"각 마이크로서비스를 독립된 프로세스로 격리하여 배포함으로써 한 서비스의 장애가 다른 프로세스로 전파되지 않도록 하였다."

분산시스템 연구에서는 프로세스 간 자원 격리 특성을 활용해 장애 전파를 막고 시스템의 신뢰성을 높이는 설계 근거로 프로세스 개념을 언급합니다.

조금 더 깊게 보면

스레드는 자원을 공유하는 대가로 경쟁 상태나 교착상태(deadlock) 같은 동시성 문제를 안고 있어, 이를 다루기 위한 잠금(lock), 세마포어, 뮤텍스 같은 동기화 기법이 함께 논의됩니다. 최근에는 스레드보다 더 가벼운 실행 단위인 코루틴이나 경량 스레드(green thread)를 활용해 동시성 오버헤드를 줄이는 접근도 시스템 논문에서 자주 다뤄집니다.

주의할 점

스레드는 프로세스 안의 자원을 함께 쓰기 때문에 속도는 빠르지만, 여러 스레드가 같은 데이터를 동시에 바꾸려 하면 값이 꼬이는 경쟁 상태(race condition) 같은 문제가 생길 수 있습니다. 이런 동시 작업의 순서와 자원 배분을 관리하는 운영체제의 실행 흐름 제어는 프로그램 코드 안의 제어구조와는 다른, 운영체제 수준의 스케줄링 문제라는 점을 구분해야 합니다.

관련 용어