질문
프로세스와 쓰레드의 차이에 대해 설명해주세요.
멀티 프로세스와 멀티 쓰레드에 대해 설명해주세요.
답변
프로세스는 실행 중인 프로그램의 인스턴스를 말한다. 프로세스 별로 독립된 논리적인 메모리 영역을 가지며 다른 프로세스와 공유하지 않는다. 쓰레드는 프로세스 내 작업의 흐름을 나타내며 프로세스 내 최소 1개 이상의 쓰레드를 가질 수 있다. 각 쓰레드는 자기만의 stack 메모리 공간을 가지며 heap 이나 data, code 메모리 공간을 공유한다. 우리가 실행 파일(프로그램)을 실행하면 프로그램 내 코드가 메모리에 적재되어 인스턴스화가 일어나고 이후 OS 의 CPU 스케줄러를 통해 CPU 가 프로세스를 실행한다.
다음은 OpenAI 의 ChatGPT 의 답변이다.
Why?
해당 질문은 기술면접을 받아본 개발자라면 최소 1번은 받아봤거나 IT 회사 입사 준비를 하는 학생들이라면 필수적으로 준비한 질문일 것이다. 컴퓨터공학 전공자라면 운영체제 수업 시간에 무조건 배우고 시험에 나오는 필수 질문이기도 하다.
그렇다면 왜 이런 질문을 하는 것이며 해당 내용을 모른다면 어떤 문제가 발생할까?
나는 아래와 같은 이유로 반드시 알아야 한다고 생각한다.
1. 버그 발생 가능성
프로세스와 쓰레드의 차이점 중 하나는 자원의 공유 여부다. 메모리 영역 관점에서 프로세스는 독립된 공간을 가지지만 프로세스 내에서 쓰레드는 stack 영역만 독립적인 공간을 갖고 heap, data, code 영역은 공유한다. 내가 개발에 주로 사용한 언어는 C++, Python 이며 특히 C++ 는 개발자가 객체를 정의할 공간(stack 혹은 heap)을 선택할 수 있다. 만일 개발자가 C++ 언어로 코딩하는데 이 특징들을 모르거나 혹은 놓친 채로 쓰레드를 고려하여 코딩한다면 공간 낭비가 발생하거나 정의되지 않은 행동(Undefined Behavior) 가 발생할 수 있으며 이는 버그로 이어질 수 있다.
예로 개발자가 멀티 쓰레드 환경에서 동시에 힙에 할당한 객체를 접근해서 읽거나 쓰는 행위를 lock 을 걸지 않고 했다고 가정하자. 이후 개발자는 운이 좋게(?) 같은 입력으로 해당 프로그램을 매번 실행할 때마다 동일한 결과가 나와 정상이라 판단하여 배포했다. 이 경우 이 프로그램은 버그가 없다고 말할 수 있을까? 내가 글을 쓰고 있긴 하지만 이 가정은 너무 무섭다. 이 Race Condition 은 정의되지 않은 행동(Undefined Behavior) 으로 정상적인 결과가 나타날 수 있으나 비정상적인 결과가 나타날 수 있다. 로봇을 다루는 곳이나 드론을 다루는 환경 같이 Mission Critical 한 분야에서 만일 해당 프로그램을 사용한다면 끔찍한 결말을 초래할 수 있다.
2. 오버헤드
나는 코드를 검사하여 알려진 취약점이나 보안 약점을 검출하는 도구를 만드는 회사에 다닌 적이 있다. 해당 도구를 개발할 때 사용자들의 핵심 요구사항은 오류 검출의 정확성과 속도였다. 그러나 정확성과 속도를 모두 만족하는 결과가 나오면 좋겠으나 보통은 상충하는 관계이다. 속도에 중점을 둔다면 정확성이 떨어지고 정확성에 중점을 둔다면 느려지는 경우가 대다수를 차지한다. 이때 조금이라도 최적화하기 위한 작업들을 진행하는데 프로세스와 스레드의 특성들을 모르거나 혹은 암기한 지식만으로 개발하게 되면 정확성도 떨어지고 느려지는 도구가 만들어질 수 있다. 예로 해당 도구가 이미 많은 쓰레드를 사용하고 있고 대부분의 쓰레드가 공유된 자원 접근을 위해 락을 거는 행위를 반복하고 있다고 가정할 때 기능 추가 시 무조건적으로 쓰레드를 사용하여 개발한다면 프로그램 실행 성능이 빠를까?
마무리
내가 다닌 회사의 도메인 특성상 혹은 언어 특성상 해당 지식이 필수적일 수도 있다고 생각한다. 또한 면접관들이 프로세스와 쓰레드를 물어보는 이유가 단순히 전공지식을 확인하기 위함일 수도 있다. 그럼에도 불구하고 '내가 면접관이었다면?' 이란 생각으로 면접자가 어떤 점을 어필하길 원할지 생각해봤다.
제가 제시한 것보다 더 나은 이유가 있을 수 있으니 댓글로 알려주시면 추가하여 반영하도록 하겠습니다!
Reference
'스터디' 카테고리의 다른 글
[주저리주저리] 2023년을 보내며... (1) | 2023.12.31 |
---|---|
[IT 회사에서 기술 면접 시 왜 이런 질문을 주로 할까?] 시작 (1) | 2023.12.30 |