开始体验一些实时线程。 我只是通过拨打usleep(TIME)将我的线程发送到睡眠状态。 这将保证线程至少休眠TIME。 我现在测量TIME = 10ms并得到高斯函数,期望值μ= 10,1ms 第二次测量时间= 1us:我在4us处得到一个大峰值。
那么为什么第二次测量不是高斯测量?我的第一个想法是,线程并没有真正入睡,但它却让人忙着等待。如上所述here (old beahavior),没有忙碌的等待。如何解释这两条曲线?
答案 0 :(得分:4)
由于计时功能的分辨率。你自己说,它保证在至少那个时候睡觉。它无法保证准确睡眠的原因是因为它很可能以4微秒的间隔运行。
man page也提到了这种现象:
任何系统活动或处理呼叫所花费的时间或系统计时器的粒度都可能会略微延长睡眠时间。
答案 1 :(得分:1)
这可以用函数调用的开销来解释,也许可以用一种等待较小间隔的不同方法来解释。您可以考虑一个不可避免的延迟,但可以减去更大的等待时间。