thread
스레드는 메모리를 공유하지만 실행 흐름은 따로 가진다
프로세스보다 가볍게 동시성을 얻는 대신, 공유 자원 수정에는 동기화 책임이 따라옵니다.
공유
코드, 전역 데이터, 힙, 열린 파일 디스크립터를 함께 본다.
고유
각 스레드는 스택, 레지스터, 실행 위치를 따로 가진다.
위험
공유 데이터 동시 수정은 race condition을 만든다.
프로세스가 공유하는 영역
같은 주소 공간을 보므로 데이터 전달은 빠르지만 보호 장치가 필요합니다.
code segment
global data
heap
file descriptor
스레드가 따로 갖는 영역
각 실행 흐름은 자신의 호출 스택과 CPU 문맥으로 독립 실행됩니다.
stack
register set
program counter
thread id
비교 축 프로세스 여러 개 스레드 여러 개
메모리 주소 공간이 분리되어 안전하지만 IPC가 필요하다. 주소 공간을 공유해 빠르지만 동기화가 필요하다.
전환 비용 페이지 테이블과 TLB 영향으로 상대적으로 무겁다. 같은 프로세스 안 문맥 전환이라 더 가볍다.
장애 영향 한 프로세스 장애가 다른 프로세스로 덜 번진다. 공유 메모리 오류가 전체 프로세스를 흔들 수 있다.
공유는 빠름
데이터 전달은 쉽지만 보호가 사라지는 것은 아니다.
고유 문맥
스택과 레지스터가 따로 있어 독립 흐름을 만든다.
동기화
공유 데이터 수정에는 lock이나 atomic이 필요하다.