본문 바로가기
Server, DevOps/CS,기술면접대비

프로세스와 스레드의 차이? (+완벽 개념정리, 멀티프로세스<멀티 스레드?)

by lumayi 2021. 11. 9.

프로세스와 스레드는 비전공자가 바로 이해하기에 어려운 주제라고 생각한다. 그래서 비전공자의 입장에서 하나씩 풀어보려한다. 일단 프로세스와 스레드의 개념부터 알아보자.

https://jokerkwu.tistory.com/89

프로세스란?

운영체제로부터 자원을 할당받는 작업의 단위이다

 

쉽게 말하자면 코드의 집합으로 이루어진 프로그램이 실행되는 것이 프로세스이다. 예를 들어 나는 컴퓨터를 키면 일단 카카오를 키고, 구글과 유투브, 이클립스를 키는데 이는 각각의 프로세스를 실행시키는 것이다.

 

그럼 스레드란?

할당 받은 자원을 이용하는 실행 단위이며, 프로세스 내에 여러 개가 생길 수 있다.

 

이것 또한 풀어서 말하자면, 위에 프로세스의 예를 들었던 이클립스를 보자. 이클립스에서 테스트를 돌리면 스레드 하나가 만들어지고, 또 테스트를 돌리면서 코드를 수정한다면 코드를 수정하는 스레드가 또 생겨날 것이다. 이렇게 각각의 작업 단위를 뜻하며, 여러 개의 스레드가 생겨나는 것을 뜻하는 것이 멀티스레드이다.

 

 

그렇다면 멀티 프로세스란 무엇일까?

 

프로세스가 동시에 2개가 실행되는 것이 멀티 프로세스다. 하지만 사실은 동시에 실행되는 것이 아니다. 읭? 무슨 말이지? 싶을 것이다. 하나의 코어에서 하나 이상의 프로세스(스레드)가 번갈아가면서 진행되지만 동시에 진행되는 것처럼 보이는 것(동시성)과 관련된 것이다. 즉, CPU에서는 한 번에 하나의 작업만 실행가능하기 때문인데, 카카오톡과 크롬을 동시에 실행시킨다고 하자. 

 

카카오톡을 실행할 때는 카카오톡이 CPU위에 올라온다. 그리고 크롬을 또 실행하면 카카오톡은 준비 상태로 CPU에서 내려가게 되고, 크롬이 CPU자리에 올라오게 된다. 이것을 Context Switching 이라고 한다.

멀티스레드에 대한 프로그램 2개만 예시를 들어도 복잡한데, 여러 개의 프로세스를 동시에 실행시키는 것은 더욱 복잡할 것으로 예상이 된다. 그래서 나온 것이 멀티스레드이다.

 

스레드는 경량화된 프로세스라고 한다. 하나의 프로세스안에 다수의 스레드가 있을 때, 스레드는 프로세스처럼 모든 영역들을 다 빼고 넣고 하지않아도 된다. 각 스레드는 스택 부분만을 따로 가지고, 코드, 데이터, 힙 영역은 공유하기 때문이다. 메모리 사용이 훨씬 효율적이게 된다. 

 

쉽게 이해하자면 우리가 공유 사무실을 쓰는데  모니터, 복사기, 커피 머신등이 있다고 치자. 그런데 한 사람(스레드)이 나갈 때 이 공유 자원(코드, 데이터, 힙)들을 굳이 가져나가고, 그 다음 사람이 굳이 또 다시 사무실로 가져오고 할 필요가 없이 공유하면 되는 것이다. 

 

그리고 멀티스레드는 한 어플리케이션에 대해 작업이 나누어질 때 처리되는 방식을 뜻한다. 이클립스 테스트를 돌리면서 코드를 동시에 수정하는 것이 그 예이다.

 

https://www.fun-coding.org/thread.html (왼쪽) 프로세스 (오른쪽) 스레드

 

멀티 프로세스 특징으로는 1)각각 독립적이라 동기화 작업이 필요가 없다. 그리고 앞서 보았듯이 2)개별 메모리 차지로 인한 자원 소모가 크다. 그리고 3)context switching의 비용이 크다는 단점도 있다.

 

반면 멀티 스레드 특징으로는 1)스레드간 긴밀하게 연결되어 있기에, 2)공유된 자원으로 통신 비용이 절감되고, 3)메모리 사용이 효율적이다. 4)공유자원관리가 필요하고 컨텍스트 스위칭 비용이 적다.

하지만 스레드간 다 연결되어 있기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향이 가게 된다. 무조건 멀티 스레드가 좋은 것이 아닌 이유이다.

 

이런 멀티스레드 단점의 실 예가 하나있다. 익스플로러를 사용할 때 [Internet Explorer의 작동이 중지되었습니다]라는 오류가 뜨면 모든 창들이 꺼져버리는 것을 경험해보았을 것이다. 이처럼 하나의 스레드 문제가 전체 프로세스에 영향을 끼치게 되는 것이 멀티스레드의 단점이다. 반면, 크롬은 멀티프로세스 사용으로 인해 개별 창 하나가 문제가 되더라도 모든 창들이 꺼지지 않는 것이다.

 

http://egloos.zum.com/muphy/v/855350

추가적으로 멀티코어란?

병렬처리된 둘 이상의 코어에서 동시에 하나 이상의 프로세스(스레드)가 한꺼번에 진행되는 것을 뜻한다.

 

 

반응형