C++中usleep(0)对Linux的影响

Dun*_*nie 10 c++ linux usleep

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)

Ign*_*ams 14

从技术上讲它应该没有效果.但是你必须记住,传递的值是最小值,而不是绝对值,因此系统可以自由地使用最小的可能间隔.


小智 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了内置的时间信息。