1. 程式人生 > >windows下select的影響一

windows下select的影響一

今天在除錯程式,偶然間發現程式的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佔用過高