2014-09-12 54 views
0

我想知道,如果代碼:是否select()的NULL超時比select()超時?

select(fd,..., NULL); 

是CPU佔用少比一個:

struct timeval tv; 
tv.tv_sec = X; 
tv_tv_usec = Y; 
select(fd,..., &tv); 

和原因。謝謝。

編輯:我在問一個單一的電話。這是一個sys調用,所以它依賴於系統,取決於select()ing程序的系統。那麼,對於系統來說,在有或沒有超時的情況下完成選擇需要更多CPU?

+0

如果沒有待處理的IO,並且在IO到達時將其出隊,那麼可能需要很小的懲罰來排隊信號。這個懲罰與IO本身的成本相關。一如既往,嘗試雙向和基準測試。結果將依賴於系統,甚至可能隨同一系統的負載情況而變化。 – Gene 2014-09-12 13:29:25

+0

您可以使用'strace。/ yourprogram'來自己找出。 – Scony 2014-09-12 13:29:43

+0

我不知道你打火機是什麼意思...... NULL值不會返回,所以循環不會旋轉,它對我來說似乎完全不相干......如果只是睡覺,直到發生什麼事情...... – 2014-09-12 13:34:51

回答

0

兩者都不是「輕」。 select是一個系統調用,將指示操作系統在任何一個觀察文件描述符上發生事件或(如果提供)發生超時時喚醒您的任務。 selectNULL超時將無限期地選擇,直到觀察到的文件描述符事件發生的過程以另一種方式中斷。

0

很明顯:

while (select(..., NULL) == 0) { /* ... */ } 

輕於:

while (select(..., tv) == 0) { /* ... */ } 

凡在電視上的時間很少,否則差異可能太小被察覺。

+0

是的,當然,但我在談論select()的單個調用,而不是循環。 – M310 2014-09-12 14:26:59

+0

如果你只是做某件事的'1',那麼擔心優化它幾乎是不成熟的。 – 2014-09-12 14:29:45

+0

嗯,我只是好奇... – M310 2014-09-12 14:34:21