2012-06-30 6 views
4

내 sigle-thread 응용 프로그램을 작동중인 스레드의 수로 분리하고 싶습니다. 한 가지 질문 만 -이 작업의 실적은 어떻습니까? GIL이 파이썬이 시간당 1 개 이상의 스레드를 실행하는 것을 막는다면 나는 이익을 얻을 수 있을까요?파이썬 GIL 및 멀티 스레드

다른 점 (c/C++ 관점에서) - 어쨌든 각 스레드는 독점적으로 만 실행될 수 있으므로 파이썬 인터프리터보다 낮은 수준에서는 동일한 제한이 있습니다.

요약 : 파이썬 스레드의 효율성이 '기본'스레드보다 작습니까?

+0

스레드의 대상은 무엇입니까? 그들은 CPU 바인딩되어 있습니까? 당신의 작업은 계산 집약적입니까? –

+0

저는 비용 운수 조작을 다른 스레드로 옮기고 싶습니다. –

답변

5

GIL에 대해 걱정하지 마십시오. 프로그램이 수행하는 일 (계산 대 I/O)의 종류에 따라 다른 성능 특성을 갖게됩니다. 프로그램이 I/O에 묶여 있다면, 아마도 GIL을 전혀 알아 채지 못할 것입니다.

다른 접근법은 multiprocessing 모듈을 사용하는 것입니다. 각 모듈은 고유 한 Python 런타임을 사용하는 자체 OS 프로세스에서 실행됩니다. 이 방법을 사용하면 여러 코어를 최대한 활용할 수 있으며 공유 메모리에 대한 액세스를 동기화 할 필요가 없으므로 대개 더 안전합니다.

+0

멀티 프로세싱을 해주셔서 감사합니다.하지만 그것에 대해 생각해 보았습니다.하지만 sigle CPU에서는 어떤 효과가 나타나지 않습니다. 맞습니까? –

+0

불행히도 그것은 IO 작업이 아니라 많은 계산입니다. –

+7

@ AlexG.P .: 단일 CPU 만 사용할 수있는 경우 스레드 나 다중 프로세스로 인해 프로그래밍 언어의 성능이 향상되지 않습니다. 이것은 파이썬과 GIL과 관련이 없습니다. –