인프런 커뮤니티 질문&답변

안은정님의 프로필 이미지
안은정

작성한 질문수

고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)

Thread(3) - ThreadPoolExecutor

ThreadPoolExecutor 에서 max_workers 질문입니다.

작성

·

1K

2

max_workers 옵션을 사용할때 작업의 개수가 넘어가면 직접설정이 유리하다고 하셨는데요..!

작업의 개수가 넘어간다는 말의 의미가 뭔지 이해가 가지 않습니다 ㅠㅠ 혹시 좀 더 자세하게 설명해주실 수 있을까요?

답변 1

0

좋은사람님의 프로필 이미지
좋은사람
지식공유자

오 은정님 안녕하세요.

답변드릴께요

예를 들어 시스템에 2개의 물리적 CPU가 있고 각 CPU에 하이퍼스레딩(현대 CPU에서 일반적임)이 있는 경우 2개의 물리적 CPU와 4개의 논리적 CPU가 있습니다. 파이썬은 4개의 CPU를 출력할거예요. 그러면 시스템의 기본 작업자 스레드 수는 (4 + 4) 또는 8이 됩니다.

이 숫자가 32개 이상(예: 물리적 코어 16개, 논리 코어 32개, 더하기 4개)이면 기본값은 상한을 32개 스레드로 자르게되요.

시스템에서 CPU(물리적 또는 논리적)보다 더 많은 스레드를 갖는 것이 일반이예요.

그 이유는 스레드가 CPU 바운드 작업이 아닌 IO 바운드 작업에 사용되기 때문인데요. 즉, 하드 드라이브, DVD 드라이브, 프린터, 네트워크 연결 등과 같이 상대적으로 느린 리소스가 응답하기를 기다리는 작업에 스레드가 사용되요.

따라서 특정 요구 사항에 따라 응용 프로그램에 수십, 수백, 심지어 수천 개의 스레드가 있는 것은 드문 일이 아닙니다. 하나 또는 수천 개 이상의 스레드가 있는 것은 드문 일입니다. 이렇게 많은 스레드가 필요한 경우 AsyncIO와 같은 대체 솔루션이 선호될 수 있다는 뜻이예요.

안은정님의 프로필 이미지
안은정

작성한 질문수

질문하기