-
[OS] 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍CS/운영체제 2023. 8. 31. 20:00반응형
Q) 프로세스와 스레드의 차이에 대해 설명해주세요.
A) 프로세스는 OS 로부터 CPU 와 메모리를 할당받아 실행중인 프로그램이고, 스레드는 이 프로세스안에서 실행되는 작업의 단위입니다. 프로세스는 운영체제로부터 자원을 할당받지만 스레드는 프로세스로 부터 자원을 할당받으며 프로세스 내의 코드, 데이터, 힙 영역을 공유하기 때문에 좀 더 효율적인 자원 사용이 가능해집니다. 또한 같은 프로세스 내의 스레드에서의 컨텍스트 스위칭이 프로세스의 컨텍스트 스위칭에 비해 더 빠르다는 장점이 있습니다.
신입 개발자 면접 단골질문으로 나온다는 이 질문을 그동안 대충 외우고만 있었지 제대로 이해하지 않고 있었기에 이번 포스팅을 통해 더 자세히 알아보겠다.
일단 스레드라는 개념은 왜 나왔을까??
모든 학문의 시발점은 인간의 필요에 의해 만들어진다. 선사시대 농경이 시작되면서 곡물을 세기위해 수학이 생기고 효율적인 농경을 위해 기하학이 생긴것 처럼 (
유튜브에서 주워들은 말이라 정확하지 않은 정보일 수 있습니다) 스레드 또한 필요에 의해 생겨난 것이다.처음 컴퓨터는 단일 프로세스 시스템이었다. 단일 프로세스 시스템이란 말 그대로 한번에 하나의 프로세스만 실행되는 것 이다. 그러므로 프로그램 A가 100초 B가 10초가 걸린다고 했을 때 A를 먼저 실행하게되면 B는 100초를 기다려야 CPU를 점유해 프로그램을 실행시킬 수 있는 것이다.
이 얼마나 비 효율적인 일인가..
그래서 나온것이 멀티프로세스 개념이다.
멀티프로세스는 일정한 time quantum을 두어 지정된 time quantum 동안 A 프로세스를 실행시키고 A 프로세스가 종료되지 않았더라도 time quantum이 지나면 B 프로세스를 실행시키는 것이다.
만약 time quantum이 5초라 가정했을 때 멀티프로세스 환경에서 B 프로그램은 A B A B 순으로 실행되어 20초만에 프로세스를 종료할 수 있는 것이다.
뿐만아니라 싱글 프로세스 환경에서 A 프로세스가 대부분이 IO 작업때문에 기다리는 시간이라면 CPU는 해당 대기시간에 아무것도 안하는 상태가 되므로 이는 자원의 낭비로 이어진다. 하지만 멀티프로세스의 경우 A가 IO 작업을 기다리는동안 B 프로세스를 실행시킬 수 있기 때문에 싱글 프로세스에 비해 시간을 효율적으로 사용할 수 있다.그럼 멀티 프로세스로 위의 문제를 충분히 해결할 수 있을 것 같은데 왜 스레드 라는 개념이 도입된걸까??
1. 컨텍스트 스위칭으로 인한 오버헤드
2. 하나의 프로세스가 동시에 여러작업을 수행할 수 없음
3. 프로세스끼리 데이터 공유가 까다로움
4. 듀얼코어가 등장했는데 잘 사용하고 싶음
위의 네가지를 해결하기 위해 스레드가 등장한 것이다.
그러면 스레드의 특징이 무엇이길래 저 문제들을 해결하는 것 일까??
스레드의 특징
1. 한 프로세스 내에 있는 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유하기 때문에 컨텍스트 스위칭 시 프로세스간 컨텍스트 스위칭에 비해 가볍다는 장점이 있다.
2. cpu 내의 코어가 두개가 있고 한 프로세스 내 스레드가 두개가 있을경우 스레드 두개가 병렬적으로 수행이 가능하다.
지금 진행중인 study-hub 프로젝트를 예시로 들어보자. A,B 두명의 사용자가 0.1 초 간격을 두고 차례로 스터디 목록 요청api를 호출했고 응답시간은 1초가 걸린다고 가정하자.일단 study-hub는 로드밸런서를 사용하고있지만 서버가 한대만 돌아가기 때문에 로드밸런서로 전송된 요청이 모두 한대의 서버로 몰린다. 코어가 2개 있고 스레드가 두개 있기때문에 A의 요청은 1번 스레드에서 처리하게된다. 이 후 0.1초 뒤 B의 요청이 오면 B의 요청은 2번 스레드에서 처리하게된다. 이렇게 되면 A는 요청한 뒤 1초뒤에 응답을 받고 B 또한 요청한 뒤 1초뒤에 응답을 받게된다.
만약 스레드가 없었다면 위의 케이스에서 B는 요청에 대한 응답을 위해 A 요청이 끝날 때 까지 기다려야 했을 것이다.
자 그러면 프로세스와 스레드에 대해 알아보았으니 나머지 멀티프로그래밍, 멀티태스킹, 멀티스레딩, 멀티프로세싱에 대해 알아보자. 이미 위에서 설명한 것들이므로 그다지 어렵지 않을 것이다.
멀티프로그래밍
프로세스 실행 시 IO 작업이 발생하면 다른 프로세스가 CPU 에서 실행되는 것이다.
이는 CPU 사용률을 극대화 시키기 위해 생겨난 것입니다.
하지만 위에서 설명한대로 장시간의 CPU 사용이 필요한 작업일 경우 다른 프로세스가 계속 대기하는 상황이 발생할 수 있습니다.
이를 해결하기 위해 멀티태스킹 이 생겨났습니다.
멀티태스킹
프로세스가 한번 실행됐을 때 매우 짧은 time quantum 동안만 실행하게 만듦.
멀티프로세싱
두개 이상의 프로세서나 코어를 활용하는 시스템
멀티스레딩
하나의 프로세스가 동시에 여러 작업을 수행하는데 목적
728x90반응형