✏️ [OS] 멀티 프로세스로 처리 가능한 걸 굳이 멀티 스레드로 하는 이유는?

박상민·2024년 2월 10일
0

CS Interview

목록 보기
2/16
post-thumbnail

하나에 프로세스에는 여러 스레드가 있을 수 있다. 컴퓨터는 실행 과정에서 여러 프로세스가 동시에 실행될 수 있고, 그 프로세스를 이루는 스레드는 여러 개 있을 수 있다. 이때, 여러 프로세스를 동시에 실행하는 것을 멀티프로세스, 그리고 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티스레드라고 한다.

여기서 한 가지 궁금증이 생긴다.
'동일한 작업을 수행하는 단일 스레드 프로세스 여러 개를 실행하는 것과 하나의 프로세스를 여러 스레드로 실행하는 것은 무엇이 다를까?'
예를 들어 "hello"를 화면에 출력하는 간단한 프로그램이 있다고 하자. 이 프로그램을 세 번 fork하여 실행하면 화면에는 "hello"가 세 번 출력된다. 이 프로그램 내에 "hello"를 출력하는 스레드를 세 개 만들어 실행해도 화면에는 "hello"가 세 번 출력된다. 이 둘은 무엇이 다를까?
"hello"가 세 번 출력되는 결과는 같은데 말이다.

여기에는 큰 차이가 있다. 프로세스는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유한다.

프로세스를 fork하여 같은 작업을 하는 동일한 프로세스 두 개를 동시에 실행하면 코드 영역, 데이터 영역, 힙 영역 등을 비롯한 모든 자원이 봇제되어 메모리에 적재된다. 한 마디로 PID, 저장된 메모리 주소를 제외하면 모든 것일 동일한 프로세스 두 개가 통째로 메모리에 적재되는 것이다.

이에 반해 스레드들은 각기 다른 스레드 ID, 프로그램 카운터 값을 포함한 레지스터 값, 스택을 가질뿐 프로세스가 가지고 있는 자원을 공유한다. 즉, 같은 프로세스 내의 모든 스레드는 동일한 주소 공간의 코드, 데이터, 힙 영역을 공유하고, 열린 파일과 같은 프로세스 자원을 공유한다.

스레드는 프로세스의 자원을 공유하기 때문에 서로 협력과 통신에 유리하다

⭐️ 멀티 프로세스로 처리 가능한 걸 굳이 멀티 스레드로 하는 이유는?

멀티 스레드는 프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소함으로써 자원의 효율적 관리가 가능하다.
프로세스 간의 통신(IPC)보다 스레드 간의 통신 비용이 적어 작업들 간 부담이 감소한다.
대신, 멀티 스레드를 사용할 때는 공유 자원으로 인한 문제 해결을 위해 '동기화'에 신경써야 한다.


출처
Tech Interview for developer
혼자 공부하는 컴퓨터 구조 + 운영체제

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글