키워드 : 프로세스, 스레드, 멀티 프로세스, 멀티 스레딩
여러 프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것
하나 이상의 일을 병렬로 처리할 수 있다.
특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생해도 다른 프로세스를 이용해서 처리할 수 있기 때문에 신뢰성이 높다.
웹 브라우저 : 브라우저 프로세스, 렌더러 프로세스, 플러그인 프로세스, GPU프로세스
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미
스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다.
예를 들어, 웹 요청을 처리할 떄 스레드를 사용하면 한 스레드가 중단되어도 다른 스레드는 실행 상태 일 수 있다.
장점
CPU가 여러 개일 경우에 각각의 CPU가 스레드 하나씩을 담당하는 방법으로 속도를 높일 수 있다.
단점
어떤 스레드가 먼저 실행될지 순서를 알 수 없다.공유 자원에 동시에 접근할 경우 원하지 않은 결과값을 가져올 수 있어서 동기화가 필요하다.
(동기화를 통해 스레드의 작업 처리 순서, 공유 자원에 대한 접근을 컨트롤할 수 있지만 과도한 lock으로 병목현상을 발생시켜서 성능이 저하될 가능성이 높다.)
스레드에서 에러가 나면 해당 스레드가 포함된 프로세스 전부에 영향을 준다.
여러 흐름을 동시에 수행
멀티 프로세스는 각 프로세스가 독립적인 메모리를 가지고 별도로 실행된다.
멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다. 멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하기 때문에 시스템 자원의 낭비가 적다. 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업이 가능하기 때문에 사용자와의 응답성도 좋다.
그러나, 멀티 스레드는 에러에 더 취약하다는 점에서는 멀티 프로세스보다 좋지 않다.
스터디하면서 받은 질문 정리
Q. Chrome이 multi process를 채택한 이유는 무엇인가요?
A. 프로세스는 스케줄링 대상이므로 멀티프로세스를 사용하면, 문맥교환(컨텍스트스위칭)이 많이 일어나고 이는 오버헤드로 이어집니다. 스레드 또한 스케줄링 대상이고 문맥교환이 발생하지만, 자원을 공유하기 때문에 오버헤드가 프로세스에 비해 적습니다.
chrome은 각각의 tab이 process-per-tab방식을 사용하고 있는데, 만약 모든 탭들이 동일한 프로세스를 사용한다면 하나의 탭에서 에러가 발생하면 모든 탭에 에러가 발생할 것이기 때문에 멀티프로세스 방식을 채택했습니다.