프로세스와 스레드

김희산·2023년 3월 9일
0

TIL

목록 보기
13/23

프로세스와 스레드

개발 면접을 볼 때 기술질문 중에 기초적인 질문으로 많이 물어보는 주제라고 생각한다. 왜 이 질문을 하는가?에 대해서 생각해보았다.
아마도 운영체제에서 작업을 실행할 때 자원을 할당하는 단위를 알고있느냐를 물어보는 것이라고 생각한다. 그리고 멀티프로세스(멀티태스킹)과 멀티스레드의 차이를 알고있느냐도 마찬가지로 말이다.

프로세스

  • 운영체제로부터 자원을 할당받는 작업의 단위
  • 실행중인 프로그램

스레드

  • 한 프로세스 내에서 프로세스가 할당받은 자원을 이용하는 개별화된 실행흐름

이렇게 보통 정의가 되어있다. 결국 자원을 할당해주는 주체는 운영체제이고 그리고 할당받은 자원은 메모리를 말하는 것이다. 프로세스에게 메모리 공간을 할당하는데 당연히 물리메모리를 직접적으로 할당하는 건 아니고 가상메모리 영역에 할당을 한다.

스레드는 프로세스 안에 있는 연산코드를 실행하는 실질적 주체이고 이 스레드가 2개이상이면 '멀티스레드' 라고 한다. 당연하게도 프로세스가 여러개면 멀티태스킹이라고 한다.

즉, 다시 정리 하자면 프로그램에서 프로세스로 메모리에 올라올 때 운영체제로부터 프로세스를 운영하기 위해 필요한 주소 공간, 메모리(Text, Data, Heap, Stack 공간) 를 부여받게 되고 스레드는 한 프로세스 내에서 동작되는 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내의 스레들끼리 공유하며 실행되는 것이다.

멀티 스레드

여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 스레드를 나눠가면서 하는 이유는 무엇일까?

  • 운영체제 입장에서는 시스템의 자원을 효율적으로 관리해야 함
  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어듬
  • 프로세스간의 통신(IPC) 보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어듬

하지만 둘 이상의 스레드가 동시에 공유자원에 접근하는 경우 동시성 문제가 발생할 위험이 있다. 따라서 한 스레드가 작업을 완료한 후에 기다리고 있는 다른 스레드가 작업을 하게 해야 하는 '동기화'를 해주어야 한다. 그래서 멀티스레드 프로그래밍은 프로그래머에게 주의를 요구한다.

정리

멀티 프로세스 vs 멀티 스레드

-> 사실 어떤 방식이 더 좋은가? 라고 하기보다는 어떤 상황이나 일의특성에 따라 어떤 방식을 사용하는게 더 적합한가? 라고 보는게 맞는 것 같다.

참고
https://zeroco.tistory.com/75
https://www.youtube.com/watch?v=x-Lp-h_pf9Q

profile
성공은 제로섬 게임이 아니라 주변인들과 함께 나아가는 것이다.

0개의 댓글