我有一个 C 语言的多线程合并排序程序,以及一个用 0、1、2 或 4 个线程对其进行基准测试的程序。我还用 Python 编写了一个程序来进行多项测试并汇总结果。
奇怪的是,当我运行 Python 时,与直接在 shell 中运行测试相比,测试的运行时间总是大约一半。
例如,当我用 400 万个整数单独运行测试程序时(最后两个参数是用于生成整数的种子和模数):
$ ./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 程序使用 subprocess 模块调用测试器,然后解析和聚合输出。任何想法为什么会发生这种情况?Python是否以某种方式优化了执行?或者当我直接运行它时是否有一些我不知道的东西减慢它?