2017-03-13 8 views
0

파이썬의 GIL을 이해하려고합니다. 나는 최근에 여러 태스크의 실행 시간을 여러 입력 파일에서 서로 다른 시간 복잡성의 다른 알고리즘을 사용하여 비교해야하는 과제를 가졌습니다. 같은 것을하기 위해 python 스크립트를 실행했지만 macOS에서 별도의 터미널 창을 사용하여 다른 입력 파일에 대해 동일한 파이썬 스크립트를 실행했습니다.GIL은 별도의 터미널 창에서 파이썬 스크립트의 병렬 처리에 영향을 줍니까?

각 입력 파일에 대해 한 터미널 창에서 하나씩 차례로 실행했습니다. 이를위한 CPU 시간은 각 프로그램이 두 배의 시간이 걸렸지 만 한 번에 모두 실행되는 여러 창을 사용하는 이전 방식과 비교할 때 각 실행마다 더 낮습니다. (참고 : 이전 방법에서는 4 개의 터미널 창이 있었고 python 스크립트는 macOS에서 clang으로 컴파일 된 a.out 실행 파일 만 실행하고 다른 파일에 출력을 저장했습니다).

누구나 왜 병렬로 실행하면 각 프로그램이 느려지는지 설명 할 수 있습니까? 별도의 코어에서 실행 되었습니까? 아니면 하나의 터미널 창에서 한 번에 하나씩 실행하면 GIL이 각 프로그램을 느리게 실행합니까?

+0

프로그램이 디스크에 액세스했거나 다른 것이 공유합니까? – Scovetta

+0

프로그램은 stdin에서 숫자를 입력 받아 stdout에 3 개의 문자열을 출력합니다.이 두 문자열은 각각 < and >을 사용하여 파일로 리다이렉션되고 각 프로그램에 다른 파일 이름이 이어졌습니다. 나는 a.out이 주 기능 외의 다른 기능을 가진 정렬 프로그램 일 뿐이므로 그들이 아무 것도 공유하지 않는다고 생각한다. –

답변

1

각 터미널 창은 새로운 파이썬 인터프리터를 시작합니다. 각 파이썬 인터프리터는 자체 GIL을 가지고 있습니다. 차이점은 아마도 OS 레벨 (디스크 I/O, 메모리, CPU주기)에서 일부 리소스에 대한 경합 때문일 수 있습니다.

+0

각 스크립트는 popen()을 사용하여 a.out을 실행하고 출력을 다른 텍스트 파일로 리디렉션합니다. 그래서 그것은 GIL이 아니며 다른 사람들이 공유하는 것을 볼 수 없습니다. 어쩌면 CPU주기. –

+0

멀티 코어 CPU와 자기 디스크를 가지고 있다면 아마도 I/O 경합 일 것입니다. 그렇습니다. 확실히 GIL 이외의 것입니다. – cco