我有一段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(),但是沒有效果。
也有想過那些時間是不是剛好沒有被執行到還是怎樣,不過還沒想到怎麼驗證。
謝謝。