簡體   English   中英

睡着忙着等待

[英]usleep busy waiting

開始體驗一些實時線程。 我只是通過調用usleep(TIME)使線程進入睡眠狀態。 這將確保線程至少休眠TIME。 現在,我用TIME = 10ms進行測量,得到了一個高斯函數,其期望值為µ = 10,1ms。用TIME = 1us進行的第二次測量:我在4us處出現一個大峰值。

那么為什么第二個測量值不是高斯呢? 我的第一個想法是,線程並沒有真正進入睡眠狀態,但是卻導致了繁忙的等待。 如此處所述(舊行為) ,沒有忙碌的等待。 如何解釋兩條曲線?

由於定時功能的分辨率 您自己說過,它保證至少可以睡覺。 之所以不能保證准確地睡眠那么長的時間,是因為它很可能以四微秒的間隔運行。

手冊頁還提到了這種現象:

任何系統活動,處理呼叫所花費的時間或系統計時器的粒度都可能會稍微延長睡眠時間。

這可以通過函數調用的開銷以及等待較小間隔的另一種方法來解釋。 您可以考慮一個無法避免的恆定延遲,但可以將其減去以等待更大的等待時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM