따봉도치야 고마워

프로세스(Process)와 쓰레드(Thread)의 차이 본문

프로그래밍/공부

프로세스(Process)와 쓰레드(Thread)의 차이

따봉도치 2020. 2. 26. 15:14

각각의 정의는 알고 있었는데 차이점을 물어보니까 대답을 잘못하겠어서 정리하는 글!

 

*프로세스(Process)

- 컴퓨터에서 연속적으로 실행되고 있는 프로그램의 단위

- 실행될 때 운영체제에서 각각 독립된 메모리 영역을 할당 받음

 

*쓰레드(Thread)

- 프로세스 내에서 실행되는 작업의 단위

- 각각 Stack만 따로 할당 받고 Code, Heap, Data 영역은 공유함

 

 

두 번째 줄의 차이가 큰 것 같다.

특히 멀티프로세스와 멀티쓰레드를 비교할 때 차이가 더 느껴짐

 


*멀티프로세스

- 하나의 응용프로그램을 여러 개의 프로세스로 구성해 각 프로세스가 하나의 작업을 처리

- 장점 :

  • 여러 개 자식 프로세스 중 하나에 문제가 발생해도 그 자식 프로세스만 죽고 다른 영향X

- 단점 :

  • *ContextSwitching(문맥교환) 시 무거운 작업이 진행되고 많은 시간이 소모 되어 오버헤드 발생
  • 프로세스는 각각 독립된 메모리 영역을 할당받아 ContextSwitching 발생 시 캐쉬 메모리 리셋하고 다시 불러와야함
  • 프로세스는 각각 독립된 메모리 영역을 할당받아 서로 자원을 공유할 수 없음 (IPC 통신 필요)

*멀티쓰레드

- 하나의 응용프로그램을 여러 개의 쓰레드로 구성해 각 쓰레드가 하나의 작업을 처리

- 장점 :

  • 시스템 자원소모/처리량 감소
  • 쓰레드 간 통신이 상대적으로 비용이 적고, 작업량이 적어 ContextSwitching이 빠름
  • 스택 외 모든 메모리를 공유하기 때문에 통신의 부담이 적음

- 단점 :

  • 주의 깊은 설계가 필요하고 디버깅이 어려움
  • 자원 공유의 문제 (동기화)
  • 하나의 쓰레드에 문제 발생 시 전체 프로세스 영향 받음

 

ContextSwitching(문맥 교환) ?
CPU가 다른 프로세스를 사용하기 위해, 현재 프로세스의 상태(문맥)을 보관하고,  새로운 프로세스의 상태를 적재하는 작업
= 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정

 

 

* 자원의 효율성을 높이고 처리 비용 및 응답 시간을 단축 시키기 위해 멀티프로세스 < 멀티쓰레드 사용

*결론적으로 두 개 차이점을 물어본다면 메모리 공유 관련해서 이야기를 풀어나가면 되지 않을까? 라고 생각중

Comments