/ ETC

프로세스와 쓰레드의 차이점

기타 포스팅입니다.




오늘은 프로세스와 쓰레드에 대해서 정리해보겠습니다.

프로세스? 쓰레드?


프로세스는 한마디로 실행중인 프로그램이라고 할 수 있습니다.
여기서또 프로그램과 프로세스를 혼동할 수 있는데 프로그램은 실행가능한 명령어들의 집합입니다.

그러면 쓰레드는 뭘까요?
그 프로세스 내에서 동작되는 여러 실행의 흐름입니다.

둘의 차이점


프로세스는 최소 하나의 쓰레드를 보유하고 있고 각각 별도의 주소공간을 할당받습니다. 독립적이죠. 그런데 쓰레드는 Stack을 제외하고 Code, Data, Heap의 나머지 영역을 서로 공유합니다.

프로세스 메모리 영역


잠깐 프로세스 메모리 영역에 대해서 알아보겠습니다.

커널 메모리 안에서 관리되는 PCB(Process Control Block) 정보외에 유저가 사용하는 메모리안의 프로세스 정보는 4가지가 있는데, Code, Data, Heap, Stack이 있습니다.

  • Code: 프로그램의 실제 코드 저장
  • Data: 프로세스가 실행될 때 정의된 전역 변수. Static 변수들을 저장
  • Heap: 프로세스 런타임 중 동적할당 변수들을 저장
  • Stack: 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간이고 함수 호출 시에 기록하고 끝나면 사라진다.

멀티프로세스 vs 멀티쓰레드


멀티프로세스는 하나의 프로그램을 여러개의 프로세스로 구성하여 각각의 프로세스가 하나의 작업을 처리하는 것이고 멀티쓰레드는, 하나의 프로그램을 여러개의 쓰레드로 구성하고 각 쓰레드가 하나의 작업을 처리하는 것입니다. 자세한 차이점은 다음과 같습니다.

  1. 멀티프로세스는 각 프로세스가 독립적이고 쓰레드는 서로 긴밀하게 연결되어있습니다.
  2. 멀티프로세스는 IPC를 사용한 통신을 해야하는데, 쓰레드는 공유된 자원으로 통신비용이 절감됩니다.
  3. 멀티프로세스는 개별 메모리를 차지하는데 쓰레드는 자원을 공유하기 때문에 좀더 효율적입니다.
  4. 멀티프로세스는 Context Switching 비용이 멀티쓰레드보다 비효율적입니다.
  5. 멀티프로세스는 동기화작업이 필요하지 않고, 멀티쓰레드는 공유자원을 관리해야 합니다.




End.