在我的应用程序中,有一个 Linux 线程需要每 10 毫秒激活一次,因此我使用 usleep (10*1000)。结果:线程永远不会在 10 毫秒后唤醒,但总是在 20 毫秒后唤醒。好的,它与调度程序时间片、CONFIG_HZ 等有关。我试图使用 usleep(1*1000) (即 1 毫秒)但结果是一样的。线程总是在 20 毫秒后唤醒。
但是在同一个应用程序中,另一个线程处理每 10 毫秒出现一次的网络事件(UDP 数据包)。有阻塞“recvfrom”(或“select”),当有传入数据包时,它每 10 毫秒唤醒一次。为什么会这样?没有数据包时,select是否必须将线程置于“睡眠”状态?为什么它的行为不同,如何在没有外部网络事件的情况下使我的线程每 10 毫秒(或多或少)处于活动状态?
谢谢,拉菲