我有一个运行在Linux系统上的线程,我需要尽可能精确地执行它。例如,每毫秒执行一次。
目前,这是通过创建一个计时器来完成的
timerfd_create(CLOCK_MONOTONIC, 0)的结构中传递所需的睡眠时间。
timerfd_settime (fd, 0, &itval, NULL);在此计时器上执行阻塞读取调用,该定时器会暂停线程执行并报告丢失的唤醒调用。
问题是,在更高的频率下,即使CPU使用率低于10%,系统也会开始松动截止日期。我认为这是由于调度器没有足够频繁地唤醒线程来检查阻塞调用。有没有一个命令可以用来告诉调度程序尽可能以一定的时间间隔唤醒线程?忙-等待是一个糟糕的选择,因为系统会处理许多其他任务。
谢谢。
发布于 2011-06-10 21:53:30
您需要获取RT linux*,然后增加要定期唤醒的进程的RT优先级。
除此之外,我在您的代码中看不到问题,如果您的进程没有被阻塞,它应该可以正常工作。
(*) RT linux -一个应用了一些实时调度补丁的操作系统。
发布于 2011-06-11 02:01:25
减少调度程序延迟的一种方法是使用实时调度程序(如SCHED_FIFO )运行您的进程。参见sched_setscheduler。
这通常会大大改善延迟,但仍然没有什么保证,为了进一步减少延迟尖峰,你需要转移到linux的实时分支,或实时操作系统,如VxWorks,RTEMS或QNX。
发布于 2011-06-10 21:54:16
除非你在一个真正的“实时操作系统”上运行它,否则你不能做你想做的事情。
https://stackoverflow.com/questions/6307266
复制相似问题