본문 바로가기

Web Sever 개발과 CS 기초/자바

Thread와 Process Fork 차이

개요 목적

Thread와 Process Fork 모두 프로세스의 흐름을 나눠 효율이 증가한다.

역할은 비슷하지만, 이 둘의 차이는 존재한다.

먼저 두 역할을 이해하기 위한 기본 용어를 이해 한 후에

Thread와 Process Fork 역할과 차이에 대해서 알아보자.

사전 지식 먼저 이해하기

프로그램, 프로세스, 스레드 

프로세스란 컴퓨터 자원을 할당 받아 실행되고 있는 프로그램이다.

프로그램은 실행 되기 전 코드 자체를 의미한다.

예를 들어, 바탕 화면에 있는 크롬 브라우저 아이콘은 프로그램이고,

아이콘을 클릭하여, 크롬을 사용하는 것은 크롬 프로세스이다.

CPU 동시성과 병렬처리. 콘텍스트스위칭

컴퓨터를 사용할 때, 다양한 프로세스를 동시에 사용한다.

크롬으로 검색을하고, 멜론 플레이어로 음악을 듣고, 인텔리제이 개발도구로, 소스코드를 실행한다.

컴퓨터는 어떻게 여러개 프로세스를 동시에 처리하는 것일까 방법은 크게 두 가지가 있다.

병렬처리

CPU안에 여러개의 코어가 있어, 각 코어마다, 프로세스를 하나씩 맡아서, 동시에 실행한다.

동시성, 콘텍스트 스위칭

동시성 기법은 한개의 CPU로 여러개의 프로세스를 돌린다.

CPU 굉장히 빠르게, 여러 프로세스를 빠르게 바꿔가면서 마치 동시에 진행되는 것처럼 실행한다.

이렇게 프로세스를 빠르게 바꿔가면서 실행하는 과정을 콘텍스트 스위칭이라고 한다.

현재 컴퓨터는 병렬처리와 동시성을 모두 이용하여, 여러 프로세스를 무리 없이 실행할 수 있다.

코어는 4개이지만, 8개의 프로세스를 마치 동시에 돌아가는 것처럼 만들 수 있다.

프로세스와 Thread의 관계 이해하기

여러 프로세스가 컴퓨터에 다양한 프로그램을 동시에 진행하는 것이라면(뮤직 플레이어, 크롬, 인텔리제이)

스레드란 하나의 프로세스에서 여러가지 일을 동시에 진행하는 것이다.

예를 들어 하나의 프로세스 = 웹브라우저 안에서도 여러가지 일들이 동시에 진행된다.하나의 웹브라우저에서 음악을 켜놓고, 게임을 다운 받으며, 정보 검색을 할 수 있다. 하나의 프로세스에서 여러가지 일이 동시에 진행될 수 있는 이유는 각 일들을 스레드로 설정했기 때문이다.

만약 스레드가 없었다면, 음악 한곡이 완전이 재생된 후에 → 게임이 다운되고 다운이 완료된 후에 → 자료검색을 할 수 있다.

(편리성과 자원의 효율적 사용이 떨어진다.)

각 스레드가 프로세스가 할당받은(cpu)를 번갈아 사용하면서,

마치 음악재생 스레드, 게임다운 스레드, 자료검색 스레드가 마치 동시에 일어나는 것처럼 진행된다.

Thread와 Process Fork 차이

하나의 웹브라우저에서 여러가지 일(검색, 다운, 재생)을 동시에 진행하는 방법은 스레드 또는 프로세스포크로 프로세스의 흐름을 나눠주는 것이다.

이 둘의 차이는 그림을 보면 쉽게 알 수 있다.

멀티프로세스(프로세스포크)는 프로세스가 할당 받은 메모리 자원을 완전히 분리하여 새로운 흐름을 만든다. 그래서 작업 전환, 음악 ↔ 게임 ↔ 검색 이 계속 일어나는데, 이 때 발생하는 비용이 많이 들어 성능이 저하된다.

대신에, 각 흐름간에 영향을 받지않아 안정성이 높다. 음악재생에서 오류가 나도, 게임 다운에는 영향을 미치지 않는다.

스레드는 공유하는 자원이 있어서, 전환 비용이 낮고 성능이 높다.

대신에 공유된 자원을 동시에 만지면서, 원치 않는 에러가 발생할 수 있다.

또 각 흐름 간에 영향을 받아서 안정성이 떨어진다.


References

https://catch-me-java.tistory.com/47

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

https://www.youtube.com/watch?v=iks_Xb9DtTM