프로세스와 쓰레드

Reading time ~1 minute

프로세스와 쓰레드

쓰레드는 왜 만들었을까?

프로세스가 하나 시작하려면 많은 자원이 필요하다. 만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당하여 주어야만 한다. JVM은 기본적으로 아무런 옵션 없이 실행하면 OS마다 다르지만, 적어도 32MB~64MB의 물리 메모리를 점유한다. 그에 반해서, 쓰레드를 하나 추가하면 1MB 이내의 메모리를 점유한다. 그래서, 쓰레드를 “경량 프로세스”라고도 부른다. (출처: 자바의 신)

Process

  • 주소 공간, 메모리 등 정상적인 실행을 위해 필요한 환경을 시스템으로부터 부여받은 존재

  • 리소스와 쓰레드로 구성된다.

  • 모든 프로세스는 하나 이상의 쓰레드를 가지고 있다.

Thread

  • 프로세스 내 실행 단위이다.

  • 프로세스 내에서 실제 작업을 수행한다.


프로세스와 쓰레드의 차이

프로세스

프로세스_쓰레드

Process

  • Code, Data, Heap, Stack 영역으로 이루어져 있으며 프로세스간에 독립된 메모리 영역을 할당 받는다.

  • 각각의 Memory space를 차지한다.

Thread

  • 프로세스 안에서 동작하며 Code, Data, Heap 영역을 공유하고 별도의 Stack만 가지고 있다.

  • Context switching시 Stack영역만 switching하면 되므로 프로세스 스위칭 보다 빠르다.

  • 쓰레드 간 자원 공유가 가능하여 편리하지만 자원 동기화 의 문제가 있다.

관련 좋은 요약들(출처: OS? Oh Yes! 도서, 브런치 글)

  • 큰 틀은 프로레스로, 세분된 작은 일 하나하나는 스레드라고 부른다.

  • 프로세스는 부여된 자원의 소유자로서, 스레드는 스케줄링의 단위로서 존재한다.

  • 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위다.


쓰레드의 장단점

장점

  • 메모리 공유로 인한 시스템 자원 소모가 줄어든다.

  • 응답시간이 단축 된다.

  • Context switching에 대한 오버헤드가 줄어든다.

단점

  • 서로 데이터를 사용하다가 충돌이 일어날 가능성이 있다.

  • 디버깅이 다소 까다로워진다.