파이썬에서 그 결과를 평가하는 멀티 스레딩의 비교 우위를보기 위해 기본 함수를 프로파일 링하려고합니다. 함수가 적용되는 데이터의 크기가 증가함에 따라 스레드 버전이 점점 더 악화되는 것 같습니다. 여기에 고려하지 않은 시작 스레드에 오버 헤드가 있습니까? 누군가가 실제로 멀티 스레드 최적화를 달성하는 방법/내가 잘못하고있는 것을 설명 할 수 있습니까?단일 스레드보다 느리게 실행되는 멀티 스레드?
from multiprocessing import Pool
def f(x):
return x*x
pool = Pool(processes=4)
import timeit
print timeit.timeit('map(f, range(20000000))', setup = "from __main__ import f", number = 1)
print timeit.timeit('pool.map(f, range(20000000))', setup = "from __main__ import f, pool", number = 1)
결과 :
5.90005707741
11.8840620518
[Finished in 18.9s]
해당하는 경우, 나는 숭고한 텍스트 3.
을하지만 당신은 전혀 스레드를 사용하지 마십시오. 나는 다중 처리가 좋지 않다는 것을 말하지 않고있다. (일반적으로 좋다!)하지만 당신의 용어는 혼란 스럽다. –
처리 할 수있는 CPU가 있습니까? 그렇지 않다면 일종의 시뮬레이트 된 멀티 스레딩이 발생합니다. 확신 할 수는 없지만 이것이 가능하다고 생각한다면 – user3282276
멀티 프로세싱은 멀티 스레딩과 다르다는 것을 알고 계실 것입니다. 나는 이것이 (이 경우) 더 나쁜 것을 수행하는 이유는 당신의 프로세스가 많이하지 않는다는 것을 상상할 것이다. 그러나 그들과 통신하면서 프로세스를 설정하는 데 많은 오버 헤드가있다. –