2017-01-06 5 views
0

파이썬 다중 처리 풀을 사용할 때 작업자 프로세스의 수는 CPU 또는 코어 수와 같아야합니까?멀티 프로세스 풀을 사용할 때 작업자 프로세스 수가 CPU 또는 코어 수와 같아야합니까?

이 기사 http://www.howtogeek.com/194756/cpu-basics-multiple-cpus-cores-and-hyper-threading-explained/은 각 코어가 실제로 CPU 칩의 중앙 처리 장치라고 말합니다. 따라서 1 프로세스/코어를 갖는 데 문제가 없어야하는 것처럼 보입니다.

내가 4 개의 코어를 가진 하나의 CPU 칩을 가지고 있다면, 1 개의 프로세스/코어가 성능을 저하시키지 않으면 서 총 4 개의 프로세스를 실행할 수 있습니다.

+1

이것은 당신이하고있는 일에 달려 있습니다. I/O를 차단하는 작업이 많은 경우 프로세스 수 이상을 실행할 수 있습니다. 컴퓨팅 집약적 인 프로세스를 수행하는 경우 코어보다 많은 프로세스가 유리하지 않습니다. – AChampion

+0

따라서 성능 저하를 피하기 위해 CPU는 한 번에 1 개의 계산 집중 프로세스에서만 작동합니다. 이것은 CPU의 코어 수에 관계없이 사실입니까? 예 : 쿼드 코어 CPU를 사용하는 경우 성능 저하없이 총 4 개의 프로세스에 대해 각 코어에서 1 개의 컴퓨팅 집중 프로세스를 실행할 수 있습니까? – user3731622

답변

1

정말 작업 부하에 따라 다릅니다. 경우에 따라 가장 좋은 방법은 벤치 마크 테스트를 실행하고 그 결과를 확인하는 것입니다.

예약 프로세스는 비용이 많이 드는 작업이므로 프로세스를 많이 실행할수록 컨텍스트를 변경해야합니다.

대부분의 프로세스가 실행 중이 아니라면 (예 : IO를 기다리고있는 경우) 오버 커밋이 도움이 될 수 있습니다. 반대의 경우, 프로세스가 대부분의 시간 동안 실행되고 있다면, CPU를 경쟁하는 것보다 더 많은 프로세스를 추가하는 것이 해를 끼칠 것입니다.

내가 파이썬과 멀티에 관한 학습 한 내용을, 최선의 조치가에서
+0

내가 읽은 몇 가지 사항에서 CPU 당 하나의 프로세스를 실행해도 "컨텍스트 변경"이라고 생각하는 이유로 인해 속도가 느려지지 않는다고합니다. 예 : 4 개의 CPU를 가지고 있다면, "컨텍스트 변경"없이 4 개의 프로세스를 실행할 수 있습니다. 내가 궁금한 점은 각 쿼드 코어에 4 개의 CPU가있는 경우 총 4 개의 프로세스에 대해 1 개의 프로세스/CPU 만 실행해야합니까, 아니면 OK입니까 (즉, "컨텍스트 변경") 총 16 개의 프로세스에 대해 1 개의 프로세스/코어를 실행합니까? – user3731622

+0

슬프게도 Windows의 스케줄러를 전혀 신뢰할 수 없습니다! 명백한 이유없이 CPU간에 프로세스를 이동합니다.프로세스를 특정 (실제) 코어에 고정하는 것이 가장 좋은 방법입니다. –

2

... 코어 당

  • 하나의 프로세스 만 건너 논리적 인 사람.

하이퍼 스레딩은 파이썬에 도움이되지 않습니다. 실제로 많은 경우 성능에 영향을 미치지 만 처음에는 직접 테스트하십시오.

  • 선호도 (pip 설치 선호도) 모듈을 사용하여 각 프로세스를 특정 코어에 고정하십시오.

적어도 32 비트 파이썬을 사용하는 창에서 광범위하게 테스트를 해보면 캐시가 끊어짐으로 인해 성능이 크게 저하됩니다. 그리고 다시 : 논리 코어를 건너 뜁니다! 논리적 인 것들은 하이퍼 쓰레딩이있는 인텔 CPU가 있다고 가정하면 1,3,5,7 등입니다.

IO가 발생하지 않는 한 실제 코어보다 많은 스레드가 아무 도움이되지 않습니다. 숫자를 바꿀거야. 특히 리눅스를 사용하는 경우, 리눅스에서 전혀 테스트를받지 않았으므로 자신의 주장을 직접 테스트하십시오.