windows下select的影響一
阿新 • • 發佈:2018-12-11
今天在除錯程式,偶然間發現程式的cpu佔用率很高,四核的cpu,其中的一個核被佔滿了。
然後在程式中搜索 while ,全部看了一遍,也沒有哪個迴圈會導致cpu佔用過高,都有sleep,而且至少是20毫秒。
但是其中一個while迴圈沒有使用Sleep,而是使用了select,程式碼如下:
struct timeval tv = {0, 100}; while (netservice_running) { CheckData(); select(0, NULL, NULL, NULL, &tv); }
每一圈休息100毫秒,應該是足夠了,由於其它迴圈沒有發現問題,而只有這個迴圈使用了一個單獨的休息方式,所以決定改掉它試一下
struct timeval tv = {0, 100}; while (netservice_running) { CheckData(); //select(0, NULL, NULL, NULL, &tv); Sleep(100); }
然後編譯執行,好了!
後去網上搜索了一下,是有人說這個事情,不過沒有深入研究,可能和實際的select實現有關。不過,在linux下,似乎使用這個函式來定時是有效的,不會導致cpu佔用過高