직접 생성
작업 수가 작고 수명 주기가 명확할 때 사용합니다. join 지점이 코드에 드러나야 합니다.
스레드를 직접 만들지, 풀에 맡길지, 프로세스나 async로 바꿀지는 작업의 반복성, 대기 시간, CPU 사용량에 따라 결정합니다.
작업 수가 작고 수명 주기가 명확할 때 사용합니다. join 지점이 코드에 드러나야 합니다.
로그 수집, 헬스 체크처럼 메인 종료를 막지 않는 보조 작업에 적합합니다.
반복 요청을 큐에 넣고 고정된 worker가 처리해 생성 비용과 폭주를 줄입니다.
CPU 계산은 multiprocessing으로 코어를 나누어 씁니다.
수많은 네트워크 대기 작업은 이벤트 루프에서 논블로킹으로 섞어 처리합니다.
CPU 바운드는 코어 수 근처로 제한하고, I/O 바운드는 대기 비율을 반영해 더 크게 잡습니다.
threads = cores x (1 + wait / compute)작업 제출 종료, 큐 drain, join, timeout을 정해 두어 프로세스가 깔끔하게 내려가게 만듭니다.
공유 변수는 lock, queue, immutable 데이터로 보호하고 임계 구역을 짧게 유지합니다.