我有一段c code大概是这样的架构:
while (1) {
select(fd); // 等待的是串流资料,时间内没有读取的话会漏失一笔资料
if (fd is triggerd) {
function1();
function2();
function3();
}
}
这时运作大致都是正常的,不会漏掉资料,loop一次大约3000us。
但是当我在function之间加了几个printf之后,就开始偶发性的漏失串流资料。
漏失资料的该次loop时间会暴增到300000us左右,但是其他次loop时间则很稳定。
而这暴增出来的时间会随机发生于三个function其中之一。
时间是用gettimeofday()来测量的。
从top观察到的结果来看,cpu和memory使用率都很低。
我有猜过是不是io buffer导致的,并试着加上fflush()和fsync(),但是没有效果。
也有想过那些时间是不是刚好没有被执行到还是怎样,不过还没想到怎么验证。
谢谢。