프로세스와 스레드
프로세스와 스레드 개념 정리
운영체제프로세스
- 실행 중인 프로그램
- 운영체제로부터 자원을 할당받는 작업의 단위
- 각 프로세스는 완전히 독립된 자신만의 메모리 공간을 가짐
- 한 프로그램이 먹통이 되어도 다른 프로그램은 멀쩡한 이유
스레드
- 프로세스 내에서 실행되는 흐름의 단위
- 프로세스가 할당받은 자원을 활용하여 실제로 작업을 실행하는 단위
- 하나의 프로세스는 여러 개의 스레드를 가질 수 있음
- 이 스레드들은 프로세스의 메모리 공간(코드, 데이터, 힙 영역)을 서로 공유
- 자원을 공유하기 때문에 스레드 간 통신이 쉽고 빠르다
- 그러나 한 스레드의 문제가 다른 스레드, 심지어 프로세스 전체에 영향을 줄 수 있음
- 이것이 바로 레이스 컨디션의 배경
메인 스레드와 워커 스레드
메인 스레드: 프로그램의 지휘자
- 프로그램이 시작될 때 기본적으로 생성되는 단 하나의 핵심 실행 흐름
- 말 그대로 프로그램의 모든 것을 지휘하는 중심적인 역할
-
주요 임무
- JS 코드의 대부분을 실행
- 사용자의 입력을 처리하고 반응
- UI 렌더링
- Node.js 환경에서는 서버를 실행하고 네트워크 요청을 받는 등 핵심 로직 담당
-
치명적인 한계
- 한 번에 딱 하나의 일만 처리할 수 있음
- 복잡한 CPU 작업을 시키면 그 작업이 끝날 때까지 다른 모든 일을 멈춤 (블로킹 현상)
워커 스레드: 분업을 위한 전문가
- 메인 스레드의 한계를 극복하기 위해 만들어진 별도의 보조 실행 흐름
- 메인 스레드가 무거운 작업을 처리하기 위해 고용한 '일꾼'
- 주요 임무
- 메인 스레드로부터 무겁고 오래 걸리는 작업을 위임받아 백그라운드에서 처리
- 자신이 맡은 계산이 끝나면, 그 결과를 메인 스레드에게 다시 알림