C программа работает быстрее, чем подпроцесс Python

У меня есть многопоточная программа сортировки слиянием на C и программа для эталонного тестирования с 0, 1, 2 или 4 потоками. Я также написал программу на Python для выполнения нескольких тестов и агрегирования результатов.

Странно то, что когда я запускаю Python, тесты всегда выполняются примерно вдвое быстрее, чем когда я запускаю их непосредственно в оболочке.

Например, когда я запускаю тестовую программу саму с 4 миллионами целых чисел для сортировки (последние два аргумента — это начальное число и модуль для генерации целых чисел):

$ ./mergetest 4000000 4194819 140810581084
0 threads:  1.483485s wall;  1.476092s user;  0.004001s sys
1 threads:  1.489206s wall;  1.488093s user;  0.000000s sys
2 threads:  0.854119s wall;  1.608100s user;  0.008000s sys
4 threads:  0.673286s wall;  2.224139s user;  0.024002s sys

Используя скрипт python:

$ ./mergedata.py 1 4000000
Average runtime for 1 runs with 4000000 items each:
0 threads:   0.677512s wall;   0.664041s user;   0.016001s sys
1 threads:   0.709118s wall;   0.704044s user;   0.004001s sys
2 threads:   0.414058s wall;   0.752047s user;   0.028001s sys
4 threads:   0.373708s wall;    1.24008s user;   0.024002s sys

Это происходит независимо от того, сколько я сортирую или сколько раз запускаю. Программа Python вызывает тестер с модулем подпроцесса, затем анализирует и объединяет выходные данные. Любые идеи, почему это произойдет? Python как-то оптимизирует выполнение? или есть что-то, что замедляет его, когда я запускаю его напрямую, о чем я не знаю?

Код: https://gist.github.com/2650009

11
задан scry 10 May 2012 в 00:24
поделиться