스레드 경계

스레드 자원 경계 지도

스레드는 프로세스 안에서 같은 주소 공간을 공유하지만, 실행 흐름을 이어가기 위한 최소 상태는 각자 보관합니다.

프로세스 안에서 공유

Code모든 스레드가 같은 함수와 명령어 영역을 실행합니다.
Data전역 변수와 static 데이터가 공통 상태가 됩니다.
Heap동적 할당 객체를 함께 읽고 쓸 수 있습니다.
FD파일, 소켓, 파이프 핸들이 같은 테이블을 참조합니다.

스레드마다 고유

PC다음에 실행할 명령어 위치를 독립적으로 가집니다.
Registers연산 중간값과 스케줄링 복귀 상태가 분리됩니다.
Stack호출 프레임과 지역 변수가 스레드별로 쌓입니다.
TLS스레드 로컬 저장소로 개인별 설정을 보관합니다.
동시성

구조의 문제

단일 코어에서도 여러 작업을 번갈아 진행할 수 있게 프로그램을 나누는 설계입니다.

병렬성

실행의 문제

멀티코어에서 실제로 동시에 실행되어 CPU 바운드 작업의 처리량을 높입니다.

동기화

공유의 비용

race, deadlock, priority inversion을 막기 위해 lock, atomic, queue 같은 규칙이 필요합니다.