我用 C 语言自制服务器遇到了一个有趣的问题。
主线部分总结如下:
while(donotend==1){
if (somethingdetected==1){
//do critical code
}
if (poll(structs,numberoffields,x) < 1){continue;}
//do functions based on poll fields that were filled in
}
我注意到的是,它poll()
决定了输出速度以及 CPU 使用率。
如果我将最后一个参数 x(超时值)设置为零,则仅程序的 CPU 使用率就超过 95%,但对服务器的每个请求都会立即处理。
但是,如果我将 x 设置为 500,则 cpu 使用率仍高于 95%,但处理请求需要 2 秒。
如果我usleep(500)
之前使用,poll()
那么 cpu 使用率几乎为零,并且处理请求不需要时间。
这是我不明白的:
为什么 poll 不能达到最后一个参数中指定的毫秒数来捕获事件并在找到至少一个事件时返回,而不是总是等待完整的毫秒超时?
什么是有效的睡眠值?我觉得指定太高的 usleep 值会导致正常程序执行锁定,而指定太低的值不会产生影响。