OS Thread Programming

pthread/GIL/스레드 풀 패턴

스레드 프로그래밍은 생성보다 수명 관리, 결과 회수, 공유 상태 보호, 런타임 제약을 이해하는 일이 더 중요하다.

01

스레드 생성

작업 함수와 인자를 넘겨 별도 실행 흐름을 만들고 반환 경로를 설계한다.

spawn
02

수명 회수

join은 끝날 때까지 기다려 결과와 리소스를 회수하고 detach는 독립 수명을 허용한다.

lifecycle
03

공유 상태 보호

mutex, condition, queue로 스레드 간 데이터 전달과 동기화를 명확히 한다.

sync
04

스레드 풀

작업마다 새 스레드를 만들지 않고 queue와 worker pool로 생성 비용을 줄인다.

pool
pthread
저수준 제어가 가능하지만 락과 수명 실수를 직접 책임진다. join 누락은 리소스 누수, detach 오용은 종료 추적 어려움으로 이어진다.
manual lifecycle
GIL
Python 스레드는 I/O-bound 작업에는 유용하지만 CPU-bound 병렬성은 제한된다. CPU 작업은 multiprocessing이나 native extension 전략을 고려한다.
runtime limit
Pool
작업량이 많을수록 스레드 풀과 backpressure가 중요하다. queue 크기, shutdown, exception 수집을 함께 설계한다.
bounded work

스레드 코드 점검

종료 프로그램 종료 시 worker가 안전하게 멈추는 경로가 있다.
예외 worker 내부 예외가 조용히 사라지지 않고 호출부에 보고된다.
공유 데이터 공유 컬렉션 접근이 thread-safe 구조 또는 락으로 보호된다.

수명 선택

pthread_create -> pthread_join: wait and collect
pthread_detach: no join, resource auto-reclaimed on exit