하루에 하나씩 정리하는 CS 지식
프로세스 vs 스레드
1. 프로세스 (Process)
-
실행 중인 프로그램의 인스턴스
-
자원 관리 단위
-
각 프로세스는 독립된 메모리 공간을 가짐
- Code, Data, Heap, Stack
크롬에서 탭 3개 열면 3개의 프로세스가 실행됨
2. 스레드 (Thread)
-
프로세스 내에서 실행되는 흐름 단위
-
CPU 스케줄링 단위
-
프로세스의 Code/Data/Heap은 공유, Stack만 개별 할당
한 크롬 탭 안에서 유튜브 재생 + 광고 로딩 + UI 업데이트 → 각각 스레드
3. 차이점
4. 프론트엔드 관점
-
웹 브라우저: 멀티 프로세스 구조 (안정성 ↑)
-
Node.js: 기본은 싱글 스레드, 하지만 I/O는 내부적으로 스레드풀 활용
-
프론트엔드 렌더링: 메인 스레드(UI/JS), 워커 스레드(Web Worker) 분리
5. QA
❓ 왜 브라우저는 멀티프로세스 구조를 채택했을까?
각 탭(Tab), 플러그인(Extension), 렌더러(Renderer)가 독립된 프로세스로 동작하며, 하나의 탭이 크래시(무한 루프 등)되어도 다른 탭에는 영향 없음.
OS 차원에서 프로세스마다 메모리·권한·주소 공간이 분리되어 보안성도 높다.
❓ JS는 싱글 스레드인데, 왜 여러 탭에서 동시에 JS를 실행할 수 있을까?
JS는 “한 런타임 내”에서는 싱글 스레드지만, 브라우저는 탭마다 별도의 프로세스와 JS 엔진을 가지고 있고, 운영체제가 이를 병렬로 실행시키기 때문에 여러 탭에서 동시에 JS를 실행할 수 있다.
❓ Web Worker는 메인 스레드와 어떻게 통신 방법은?
메시지 기반 postMessage 으로 데이터를 주고받는다. 메모리를 직접 공유하지 않고 복사본을 전달하며, postMessage로 전송하고 onmessage 이벤트로 수신한다.
비동기 처리로 메인 스레드의 렌더링을 방해하지 않는다.