기술

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

개복치 개발자 2021. 8. 13. 17:44

 한번쯤은 들어봤지만, 늘 헷갈리는 프로세스와 쓰레드의 차이에 대해서 알고 가겠습니다.

 

 저도 컴퓨터공학 전공자이다 보니 수업시간에 들어봤고, 공부했던 내용이긴 하지만 이거 시험한번 치고나면 머리속에서 삭제되는게 가장 큰 문제죠.

 

 자, 기억의 끈을 더듬어서 한번 자세히 살펴보겠습니다.

 

 일단 이게 뭔지 궁금하면, 구글에 검색을 해봅니다. 물론 구글 검색해서 나오는 결과는 매우 두루뭉실하고 빡치게 설명되어있긴 합니다.

 

 프로세스란 무엇인지 검색해보면 아래와 같이 나옵니다.

 

 프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다.

(참조 - 위키백과)

 

 연속적으로 실행되고 있는 컴퓨터 프로그램이 뭘까? 하고 생각해보면 아래의 작업관리자를 생각하면 편합니다.

 

 저 실행되고 있는 프로그램 하나하나들이 프로세스라고 생각하면 됩니다.

 

 

 자, 그렇다면 프로세스는 실행되고 있는 프로그램이라는 것을 알았는데, 쓰레드는 무엇인가? 에 대해서 또 구글 검색을 해보겠습니다.

 

 스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.

(참조 - 위키백과)

 

 자 여기까지 한번 본다면, 쓰레드는 프로세스 내부에서 돌아가는 아이들이라고 생각할 수 있습니다.

 

 

 이게 뭔지 와닿게 설명해보면 크롬의 여러가지 탭이라고 생각해보시면 됩니다.

 

 하나의 프로세스(크롬)안에서 여러개의 쓰레드(탭) 이 있는 형태입니다.

 

 

 이정도로 간단하게 알아보면 안될 것 같죠??

 

 좀 더 알아보겠습니다.

 

 프로세스와 쓰레드의 차이점을 알아보겠습니다.

 

 프로세스의 경우, 아래와 같이 하나의 일을 하다가 다른 일들을 할 때 컨텍스트 체인지(context change)가 일어납니다.

  만약 카카오톡을 쓰다가 크롬을 쓰면 컨텐스트 체인징이 일어나겠죠? 

 

 그런데 쓰레드를 사용하면 컨텍스트 체인지 비용이 줄어듭니다.(공유자원을 활용하니깐)

 

 간단하게 한번 정리해보면

 

 프로세스

 

 - 개별 메모리를 차지해서 메모리 차지

 - 컨텐스트 체인지 비용이 큼

 - 동기화 작업이 불필요

 

 쓰레드

 

 - 공유된 자원으로 메모리 효율적

 - 다만, 공유된 자원 관리를 해줘야함.

 

 정도로 정리해볼 수 있습니다.

 

 그러면 멀티쓰레딩(쓰레드를 여러개 돌리는것)에 대해서 조금 더 알아보면

 

 메모리 구조부터 한번 보고 가겠습니다.

 

 

 코드영역, 데이터 영역, 힙 영역, 스택 영역으로 나눠져 있습니다.

 

 멀티 쓰레드의 경우 스택 영역만 비공유(힙, 데이터, 코드 공유)

 멀티 프레세스의 경우 모두 비공유합니다.

 

  멀티 쓰레드의 장점으로

 

 - 메모리공간과 시스템 자원 소모 줄어듬

 - 힙 영역을 이용해 데이터 주고받을 수 있음

 - 캐시 메모리를 비울 필요가 없어서 빠름

 - 자원 소모 줄어듬

 

 멀티 쓰레드의 단점

 

 - 병목현상이 발생하여 성능 저하될 가능성이 높음

 - 동기화 관련해서 락(lock)을 방지해줘야함

 

 

 이 정도로 정리해줄 수 있을 것 같습니다.

 

 

 - 참고

 

https://www.youtube.com/watch?v=1grtWKqTn50 

https://goodgid.github.io/What-is-Multi-Thread/

 

멀티 쓰레드(Multi Thread)란 무엇인가?

Index

goodgid.github.io

 

http://tcpschool.com/c/c_memory_structure

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 

 

 

 

 

'기술' 카테고리의 다른 글

프로토콜 버퍼란?  (0) 2022.12.01
객체지향의 원칙  (0) 2021.10.20
Heap Stack  (0) 2021.09.27
OSI 7 Layer  (0) 2021.08.24
DB Index  (0) 2021.08.14