У меня есть многопоточная программа слияния в 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 script:
$ ./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 каким-то образом оптимизацией исполнения? или что-то замедляет его, когда я запускаю его напрямую, о котором я не знаю?