假设我有一个以这种方式在 Unix 中执行的代码:
$ ./mycode
我的问题是有没有一种方法可以计算我的代码执行 K 次的运行时间。例如,K 的值 = 1000。
我知道 Unix“时间”命令,但只执行了 1 个实例。
假设我有一个以这种方式在 Unix 中执行的代码:
$ ./mycode
我的问题是有没有一种方法可以计算我的代码执行 K 次的运行时间。例如,K 的值 = 1000。
我知道 Unix“时间”命令,但只执行了 1 个实例。
改进/澄清查理的回答:
time (for i in $(seq 10000); do ./mycode; done)
尝试
$ time ( your commands )
编写一个循环进入括号以根据需要重复您的命令。
好的,我们可以解决命令行太长的问题。这是 bash 语法,如果您使用另一个 shell,您可能必须使用expr(1)。
$ time (
> while ((n++ < 100)); do echo "n = $n"; done
> )
real 0m0.001s
user 0m0.000s
sys 0m0.000s
只是一个建议:确保这个“基准”接近你对执行程序的实际使用。如果这是一个短暂的进程,那么仅创建进程就可能会产生很大的开销。不要假设它与在程序中将其实现为循环相同。
为了增强一些其他响应,如果您决定测试,例如一百万次,其中一些(基于 seq 的响应)可能会导致命令行太长。以下没有这个限制
time ( a=0 ; while test $a -lt 10000 ; do echo $a ; a=`expr $a + 1` ; done)
“命令行太长”问题的另一个解决方案是在 bash 中使用 C 风格的 for 循环:
$ for ((i=0;i<10;i++)); do echo $i; done
这也适用于 zsh(尽管我敢打赌 zsh 有一些更好的使用方式,但我对 zsh 还是很陌生)。我无法测试其他人,因为我从未使用过任何其他人。
如果您担心不断地将可执行文件加载和卸载到进程空间的开销,我建议您设置一个 ram 磁盘并从那里为您的应用程序计时。
早在 70 年代,我们曾经能够在可执行文件上设置一个“粘性”位并将其保留在内存中。我不知道有哪个 unix 现在支持这种行为,因为它使更新应用程序成为一场噩梦。 .. :o)