CS기술면접을 하다보면, 스레드와 프로레스에 대한 질문을 하는 경우가 있다.
기본적인 CS 지식이지만 알고 있는 것과 말로 표현하는 것은 다른 것이라 생각하고 그렇기에 질문을 받았을 때, 버벅이게 될 수 있다.
따라서 이번엔 개념서 방식보단 이번 포스트에서는 다음 5 가지에 대한 QnA 를 진행하고 이를 통해 개념을 제대로 이해해보자.
Q. 프로세서(코어) 가 무엇인가요?
A. 프로세서(코어)는 한번에 하나의 일만 수행할 수 있다. 현대의 CPU 는 초당 수십억 번 이상의 연산을 수행한다.
Q. 멀티프로세싱과 멀티태스킹은 무슨 차이인가요?
A. 멀티프로세싱은 하드웨어 관점에서 여러 CPU 를 사용하여 동시에 여러 작업을 수행하는 것을 의미한다. 다시 말해 연산을 수행하는 주체의 수가 여러 개라는 의미이다.
반면 멀티태스킹은 소프트웨어 관점에서 여러 프로그램이 동시에 실행되고 있다고 인지할 수 있도록 CPU 가 매우 빠르게 두 프로그램의 코드를 번갈아 수행하는 것이다. 프로세서(코어)가 여러 프로그램의 작업을 아주 짧게 수행하여 사용자가 부드럽게 동시에 여러 프로그램이 수행되어 있게 느끼게 한다.
Q. 프로그램과 프로세스의 관계에 대해 얘기해주세요
A. 프로그램은 다양한 언어를 이용하여 만들어진 코드의 모음, 단순한 파일이다. 이러한 프로그램이 컴퓨터 내에서 실행이 되려면 프로세스가 생성되어야 한다. 프로세스는 실행 중인 프로그램의 인스턴스라고 할 수 있다.
Q. 프로세스와 스레드의 관계에 대해 얘기해주세요
A. 프로세스는 독립적인 메모리 공간을 가지고 있는 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 서로 간섭하지 않으며, 서로의 메모리에 접근할 수 없다. 프로세스는 하나 이상의 스레드를 반드시 포함한다. 스레드는 CPU(코어)를 사용해서 코드를 하나하나 실행하는 단위이다. 스레드는 프로세스가 제공하는 동일한 메모리 공간(코드 섹션, 데이터 섹션, 힙)을 공유한다. 그리고 각각 자신의 스택을 가지고 있다.
Q. 멀티 스레드가 무엇인가요?
A. 한 프로세스 내에 스레드의 개수가 여러개인 경우를 뜻한다. 일반적인 코드의 흐름은 단일 스레드로 처리가 가능하다. 하지만 일을 병렬적으로 진행하기 위해 스레드의 수를 늘려야 있다. 이러한 스레드들은 프로세스가 제공하는 동일한 메모리 공간을 공유한다. 정리하면, 멀티 스레드는 하나의 프로그램 내에서 동시에 여러 작업을 진행하기 위해 필요하다.
Q. 프로레스와 스레드에 대해 개발자 대상으로, 그리고 일반인 대상으로 설명해주세요.
개발자 대상
A. 프로그램을 실행하면 프로그램의 인스턴스인 프로세스가 생성이 되며, 이는 고유한 메모리 공간을 가지게 된다. 프로세스 내에서 실제 작업은 스레드가 수행하며, 여러 작업을 병렬적으로 수행하기 위해서는 스레드를 늘릴 수 있다. 하지만, 스레드를 늘릴 때에는 프로세스 내의 공유되는 동일한 메모리 공간으로 인한 동시성 문제를 신경써야 한다.
일반인 대상
A. 우리가 컴퓨터를 가지고 요리게임을 한다고 했을 때, 프로그램을 실행하면 창이 뜨는데 이 창을 프로세스라고 할 수 있어. 그러면 그 창에서 요리를 만들고, 서빙하고 설거지하고 등등 업무들이 다양할텐데, 혼자서하면 병렬적으로 못하니까, 직원을 뽑겠지? 그럼 그 직원들이 스레드인거야. 직원별로 지금 뭘 하고 있는지가 개개인의 스택에서 관리되고 있고, 가게라는 프로세스의 전체적인 공간을 공유하고 있지. 여기서 발생할 수 있는 문제가 동시성 문제인데, 요리사가 2명이라고 하자. 동일한 가게라는 공간을 사용하고 있기 때문에 공유되는 자원에 대해서 동시성 문제가 발생할 수 있어. 너도 나도 같은 자원을 원하게 되는 경우이지.
해당 포스팅은 인프런 "김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성" 편에 대한 학습 메모입니다.
'CS' 카테고리의 다른 글
자바 - 스레드 실행 (0) | 2024.12.10 |
---|---|
자바 - 컨텍스트 스위칭 (0) | 2024.12.10 |
자바 - 스레드와 스케줄링 (0) | 2024.12.10 |