usleep的文档说明调用usleep(0)没有效果.但是,在我的系统(RHEL 5.2)上运行下面的C++代码小片段时,我发现它实际上看起来效果与之相同usleep(1).这是预期的,如果是这样的话,为什么文档与我在现实生活中看到的内容之间存在差异?
图表A.
码:
#include <unistd.h>
int main()
{
for( int i = 0; i < 10000; i++ )
{
usleep(1);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ time ./test
real 0m10.124s
user 0m0.001s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
图表B
码:
#include <unistd.h>
int main()
{
for( int i = 0; i < 10000; i++ )
{
usleep(1);
usleep(0);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ time ./test
real 0m20.770s
user 0m0.002s
sys 0m0.001s
Run Code Online (Sandbox Code Playgroud)
小智 5
我只是想指出这里使用的时间命令。如果你想检查你的程序内存、cpu、时间统计,你应该使用/usr/bin/time而不仅仅是time命令。当您在没有完整路径的情况下调用 time 时,将调用内置 time 命令。看看区别。
# time -v ./a.out
-bash: -v: command not found
real 0m0.001s
user 0m0.000s
sys 0m0.001s
Run Code Online (Sandbox Code Playgroud)
# /usr/bin/time -v ./a.out
Command being timed: "./a.out"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:10.87
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 0
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 220
Voluntary context switches: 10001
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
Run Code Online (Sandbox Code Playgroud)
使用man time了/usr/bin/time手动和使用help time了内置的时间信息。