• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

ThreadPoolExecutor 에서 max_workers 질문입니다.

23.06.25 17:53 작성 조회수 577

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와 같은 대체 솔루션이 선호될 수 있다는 뜻이예요.