손영배 블로그 누구나 쉽게 이해하고 습득하기
프로그램(Program)과 프로세스(process)와 스레드(thread)의 차이 본문
면접질문에서 가장 많이 받은 질문 중 하나이다. IT 개발직군이라면 말이다.
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.
Program이란?
- program은 실행파일이다. 파일 시스템에 존재하는 실행파일이 프로그램입니다.
즉. 'exe'로 끝나는 파일들이다.
Process는
- 사용자가 프로그램을 더블클릭해서 실행하게 되면 운영체제가 그 프로그램을 실행시켜줘 그 프로그램을 실행시키는 실행 주체 그것을 인스턴스라고도 표현을 합니다.
프로그램의 하나의 인스턴스 그것이 프로세스예요!
즉 프로그램을 실행하게 되면 CPU를 차지하면서 수행하는 수행 주체가 프로세스입니다.
프로그램은 하나지만 이 프로그램을 실행하는 인스턴스는 여러 개가 생길 수 있습니다.
프로세스(process)
- 운영체제로부터 자원을 할당받는 작업의 단위
- 운영체제에서는 실행 중인 하나의 어플리케이션
- 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메로리를 할당받아 애플리케이션의 코드를 실행하는데 이것이 프로세스. 예) chrome 브라우저 하나, 두개면 두개의 프로세스 생성
멀티 태스킹(multi tasking)
- 두 가지 이상의 작업을 동시에 처리하는 것을 말하는데, 운영체제는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 로세스마다 적절히 할당해주고, 병렬로 실행시킨다.
- 예) 카톡음악을 실행시키면서 카톡을 하는 것 처럼, 한 블로그 내에서 음악을 들면서 웹 서핑하는 것
- 이런게 다 멀티 스레드(multi thread)로 가능
스레드(thread) : 한 가닥 실이라는 뜻
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 하나의 스레드는 하나의 코드 실행 흐름이기 때문에 한 프로세스 내에 스레드가 두 개라면 두 개의 코드 실행 흐름
- 멀티 스레드는 애플리케이션 내부에서 멀티 태스킹이라고 볼 수 있다.
프로세스는 실행될 때 운영체제로부터 프로세서, 필요한 주소 공간, 메모리 등 자원을 할당받고,
스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행됩니다.
그렇다면 왜 여러 프로세스(멀티 프로세스)로 할 수 있는 작업들을 굳이 하나의 프로세스에서 스레드로 나눠가면서 할까?
-----> 운영체제는 시스템 자원을 효율적으로 관리하기 위해서 스레드를 사용하는 것이죠. 자세히 말씀드리면 멀티 프로세서로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 효율적으로 관리할 수 있다. 뿐만 아니라 프로세스 간의 통신보다 스레드 간의 통신의 비용이 적으므로 작업들 간의 통신의 부담이 줄어줄게 됩니다.
이처럼 스레드를 활용하면 자원의 효율성이 증가하지만 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제에 신경을 써야 합니다. 때문에 멀티스레드 프로그래밍은 프로그래머의 주의를 요구하니다.
위 질문에 대한 핵심은 운영체제에서 작업을 실행할 때 자원을 할당하는 단위를 알고있느냐와 프로그램을 멀티 스레드를 구현할 때 장,단점을 알고 있느냐에 대한 질문입니다.
'Interview' 카테고리의 다른 글
추상클래스(abstract) (0) | 2019.08.31 |
---|---|
인터페이스(interface)란? (0) | 2019.08.31 |
제네릭이 무엇인가? (0) | 2019.08.30 |
GET방식과 POST 방식의 차이에 대해서 (0) | 2019.06.19 |
백 엔드 개발자가 알아야 할 것들 (0) | 2019.06.14 |