join · detach · daemon

스레드는 끝나는 방식까지 설계해야 한다

스레드 생성은 시작일 뿐입니다. 결과가 필요한지, 자원을 누가 회수하는지, 프로그램 종료 때 끊겨도 되는지를 함께 결정해야 합니다.

01

create

pthread_create() 또는 Thread.start()로 실행을 시작합니다.

02

run

스레드는 작업을 수행하고, 공유 상태가 있다면 락이나 큐가 필요합니다.

03

finish

함수가 반환되거나 종료 신호를 받아 작업 루프를 빠져나옵니다.

04

reclaim

join, detach, daemon 정책에 따라 결과와 자원 처리가 달라집니다.

join

결과와 완료가 중요할 때

호출 스레드가 끝날 때까지 기다립니다. C에서는 반환 포인터를 받고, Python에서는 완료 시점을 확정합니다.

detach

C에서 결과가 필요 없을 때

join하지 않을 스레드는 detach로 분리해 종료 시 자원이 자동 회수되게 합니다. 이후 join은 할 수 없습니다.

daemon

Python 백그라운드 보조 작업

메인 스레드가 끝나면 기다리지 않고 종료됩니다. 파일 저장처럼 정리가 필요한 작업에는 적합하지 않습니다.

결과 필요
join을 기본값으로 둡니다

완료 시점과 실패 처리를 명확히 만들고, 종료된 스레드 자원을 놓치지 않습니다.

반복 작업
개별 생성보다 풀을 검토합니다

같은 종류의 작업이 계속 들어오면 다음 단계의 ThreadPoolExecutor 또는 작업 큐가 더 안정적입니다.