«   2018/08   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Tags
more
Archives
Today
0
Total
1,345
관리 메뉴

피아노 치는 개발자

프로세스와 쓰레드의 차이 본문

개발/일반

프로세스와 쓰레드의 차이

Claude.Seo 2017.02.02 07:35

"프로세스와 쓰레드의 차이점을 설명하시오."

개발자 면접에서 빠지지 않고 꼭 나오는 단골 질문이다

혼자 속으로만 생각하면 면접 시 헷갈릴 수 있기 때문에 정확하게 정리할 겸 블로그에 포스팅으로 남겨두려고 한다.



프로세스란?

프로그램은 일반적으로 주기억장치에 저장된 실행코드를 의미한다.

프로세스는 사용 중인 프로그램, 데이터, 상태, 메모리 저장 영역 공간, 쓰레드 정보, 전역 데이터가 저장된 공간 등 운영체제로 부터 할당받은 자원을 포함하는 개념이다.

종종 스케줄링의 대상이 되는 Task 와 거의 비슷한 의미로 사용된다.

같은 프로그램을 여러번 실행시킨다고 해서 프로세스가 공유되는것이 아니라, 여러 개의 프로세스라 메모리 상에서 실행된다.



쓰레드란?

프로세스가 할당받은 자원을 이용하여 동작하는 여러 실행의 단위이다.

1개의 프로세스에는 최소 1개의 쓰레드가 존재하며, 프로그램 환경에 따라 다수개의 쓰레드가 존재할 수 있다. 이를 멀티쓰레드 라고 부른다.



차이점

프로세스는 완전히 독립적인 공간이기 때문에 메모리 부분(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않는다.

쓰레드는 한 프로세스 내에 존재하는 여러 실행의 흐름으로, Stack을 제외한 나머지 영역을 다른 쓰레드들과 공유한다.



멀티 프로세스 대신 멀티 쓰레드를 사용하면 좋은 이유

멀티 프로세스로 할 수 있는 작업들을 멀티 쓰레드로 할 경우 메모리 공간 절약 및 프로세스 생성하는 시스템 콜이 줄어들어 효율적으로 시스템을 관리할 수 있게 된다.


쓰레드간의 통신이 필요한 경우, 메모리 영역을 공유하기 때문에 별도의 자원을 사용하지 않고 데이터를 주고받을 수 있다.

즉, 프로세스의 통신 비용보다 쓰레드간의 통신 비용이 훨씬 적어 통신에 대한 비용 부담이 줄어들게 된다.


요약

1. 시스템의 Throughput (처리율)이 향상된다.

2. 시스템의 자원 소모가 줄어든다

3. 프로그램의 응답시간이 줄어든다

4. 프로세스간의 통신비용보다 쓰레드간의 통신비용이 적게든다

==> 시스템을 효율적으로 관리할 수 있다



단점

1. 쓰레드는 Stack을 제외한 나머지 영역들을 공유하고 있으므로, 자원 공유 시 충돌을 조심해야된다 (race condition)

2. 버그가 발생했을 때 여러 쓰레드를 추적해야 하므로 상황 재현 및 디버깅이 어렵다

3. 쓰레드 실행 순서가 보장되지 않는다

4. 많은 쓰레드가 동작할 경우 오히려 응답시간이 지연될 수 있다




0 Comments
댓글쓰기 폼
Prev 1 2 3 4 5 6 7 8 9 10 Next