기술 면접 단골손님 feat. 운영체제
프로세스와 스레드에 대해서 설명해주세요.
익숙한 질문입니다. 신입 개발자 면접 질문 목록에 빠지지 않고 등장하는 질문인데요.
아무리 쉽고 익숙한 질문도 머릿속에서만 생각한다면 질문을 받았을 때 말로 표현하기 힘듭니다.
때문에 이 포스팅을 작성합니다.
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.
제 나름대로 두 개념에 대해서 말장난 같은 정의를 내려보았습니다.
프로세스는 실행될 때 운영체제로부터 프로세서, 필요한 주소 공간, 메모리 등 자원을 할당받습니다. 스레드란 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행됩니다.
그러니까 프로세스와 스레드에 대한 질문은 결국에는 운영체제가 시스템의 자원을 어떤 단위로 할당하고, 프로세스와 스레드는 이 자원을 어떻게 사용하느냐를 알고 있냐에 대한 질문입니다.
그렇다면 왜, 여러 프로세스(멀티 프로세스)로 할 수 있는 작업들을 굳이 하나의 프로세스에서 스레드로 나눠가면서 할까요? 이유는 굉장히 간단합니다. 운영체제는 시스템 자원을 효율적으로 관리하기 위해서 스레드를 사용하는 것이죠.
자세히 말씀드리자면 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있습니다. 뿐만 아니라 프로세스 간의 통신보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어들게 됩니다.
이처럼 스레드를 활용하면 자원의 효율성이 증가하기도 하지만 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제에 신경을 써야 합니다. 때문에 멀티스레드 프로그래밍은 프로그래머의 주의를 요구합니다.
다시 한번 말씀드리지만 위 질문에 대한 핵심은 운영체제에서 작업을 실행할 때 자원을 할당하는 단위를 알고 있느냐와 프로그램을 멀티 스레드를 구현할 때 장.단점을 알고 있느냐에 대한 질문입니다.
이와 관련해서 참고하면 좋을 사이트를 공유합니다.
아래 URL은 광고입니다. 도움이 되셨다면 클릭 부탁드려요 :D
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.