我有一个线程需要每隔X纳秒处理一个项目列表,其中X< 1微秒。据我所知,使用标准x86硬件时,时钟分辨率最多为15-16毫秒。是否有可用于实现时钟分辨率的硬件< 1微秒?目前,由于nanosleep()的分辨率不足,线程连续运行。线程从GPS参考中获取当前时间。
答案 0 :(得分:1)
您可以使用rdtsc
指令在x86上以极高的精度获取当前时间。它计算时钟周期(在固定的参考时钟上,而不是实际的动态频率CPU时钟),因此一旦找到将其映射到实际GPS时间的系数,就可以将其用作时间源。
这是Linux内部使用的时钟源,在足够新的硬件上。 (当CPU在空闲时停止时,较旧的CPU具有rdtsc时钟暂停,和/或在CPU频率缩放时改变频率)。它最初用于测量CPU时间,但事实证明,具有非常低成本读取(约30个时钟周期)的非常精确的时钟是有价值的,因此将其与CPU核心时钟变化分离。
听起来一个准确的时钟并不是你唯一的问题,但是:如果你需要每隔约1个人处理一个列表,而不会错过唤醒,你需要一个实时操作系统,或者至少是实时功能常规操作系统的顶部(如Linux)。
知道你最终醒来的时间是多久没有帮助,如果你睡了10毫秒太久,因为你读了操作系统决定驱逐的内存页,而且必须从磁盘上获取。