【发布时间】:2020-12-18 01:18:26
【问题描述】:
#include <stdio.h>
#include <time.h>
int main()
{
struct timespec stReq;
stReq.tv_sec = 0;
stReq.tv_nsec = 1;
while(1)
{
nanosleep(&stReq,NULL);
printf("hello,world\n");
}
return 0;
}
当我运行这个进度时,top 显示的%CPU 列仅与2% 差不多。
为什么这么低?
【问题讨论】:
-
那么,删除
printf- 有什么影响吗? -
或者,你偶然看到它每秒打印 10 亿条消息?
-
@AnttiHaapala 删除
printf后结果相同 -
我没有投反对票,因为我认为在投反对票之前你必须解释原因。在这种情况下,这是一个非常幼稚的问题,值得解释。
nanosleep()无法处理小于底层时钟粒度(即系统滴答声)的间隔,如您使用 1nS 的情况,以正常速率有效调度。此外,printf()不会在不到 1nS 的时间内执行(它与操作系统交互,由此产生的同步将再次影响有效调度。最终结果调度是标准的。CU 费用是与完整 CPU 相比运行的有效代码。
标签: c linux performance operating-system system-calls