C程序比Python子进程快

2024-10-03 00:20:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用C编写的多线程mergesorting程序,以及一个用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脚本:

^{pr2}$

无论我排序多少次,或者运行多少次,都会发生这种情况。python程序用subprocess模块调用测试人员,然后解析并聚合输出。你知道为什么会这样吗?Python是否在某种程度上优化了执行?或者,当我直接运行它时,是否有什么我不知道的东西在减慢它?在

代码:https://gist.github.com/2650009


Tags: 程序参数sys时间基准整数shell线程
2条回答

原来我路过系统最大值作为生成随机数的模。C截短64位整数并将其解释为有符号,即2的补码中的-1,因此每个随机数都被这个数修改,变成0。因此,对所有相同的值进行排序所花费的时间似乎是随机数据的一半。在

在这个shell中包装一个脚本可能会有相同的效果。如果是这样,那就是控制台操作了

相关问题 更多 >